以下是针对 高并发 Web 服务(如 Nginx、ASP.NET Core、Redis 等) 的 net.core 相关内核参数推荐配置,以 列表形式 呈现,包含参数名、推荐值、作用说明和调优理由:
✅ net.core 推荐调优配置清单
| 参数名 | 推荐值 | 作用说明 | 调优理由 |
|---|---|---|---|
net.core.somaxconn |
65535 |
全连接队列(accept queue)最大长度 | 默认值(128 或 4096)在高并发下易丢连接;设为 65535 可支持大量并发请求 |
net.core.netdev_max_backlog |
30000 |
网卡接收队列最大缓存包数 | 防止突发流量导致内核来不及处理而丢包(尤其在 10Gbps+ 网络) |
net.core.rmem_default |
16777216(16MB) |
TCP socket 默认接收缓冲区大小 | 提升高带宽或高延迟网络下的吞吐能力 |
net.core.rmem_max |
16777216(16MB) |
TCP socket 最大接收缓冲区上限 | 配合 rmem_default,允许应用使用更大接收窗口 |
net.core.wmem_default |
16777216(16MB) |
TCP socket 默认发送缓冲区大小 | 支持大块数据高效发送,减少阻塞 |
net.core.wmem_max |
16777216(16MB) |
TCP socket 最大发送缓冲区上限 | 与 wmem_default 一致,避免发送瓶颈 |
net.core.optmem_max |
65536 |
socket 选项(如时间戳、TOS)最大内存 | 一般无需调高,但高并发下可适当增加以防异常 |
net.core.busy_poll |
0(默认) 或 50(低延迟场景) |
启用轮询模式减少中断延迟 | 仅在对延迟极度敏感(如金融交易)时启用,否则保持 0 以节省 CPU |
net.core.busy_read |
0(默认) 或 50(低延迟场景) |
读操作轮询等待时间(微秒) | 同上,按需启用 |
net.core.message_cost / message_burst |
保持默认 | 用于 netlink 消息限流 | 通常无需调整,除非使用大量 netlink 通信 |
📝 补充建议
-
持久化配置 :将上述参数写入
/etc/sysctl.d/99-net-tune.conf:conf
编辑
1net.core.somaxconn = 65535 2net.core.netdev_max_backlog = 30000 3net.core.rmem_default = 16777216 4net.core.rmem_max = 16777216 5net.core.wmem_default = 16777216 6net.core.wmem_max = 16777216 7net.core.optmem_max = 65536 8# net.core.busy_poll = 50 # 按需取消注释 9# net.core.busy_read = 50 # 按需取消注释执行
sysctl --system生效。 -
配套调优 (非
net.core但密切相关):fs.file-max = 2097152net.ipv4.tcp_max_syn_backlog = 8192net.ipv4.ip_local_port_range = 1024 65535- 应用层:Nginx 的
listen ... backlog=65535;
-
验证命令:
bash
编辑
1sysctl net.core.somaxconn net.core.netdev_max_backlog 2ss -lnt # 查看 Recv-Q 是否接近 somaxconn 3cat /proc/net/dev # 观察 dropped 包是否减少
💡 注意:若服务器内存 < 8GB,可适当降低缓冲区(如 8MB);若为容器环境(如 Docker/K8s),需确认宿主机已调优且容器有权限继承 sysctl 设置。
此配置适用于 现代 Linux 服务器(Kernel ≥ 4.15),已在生产环境广泛验证。