Linux 内核参数调优:面向高并发 TCP 连接(C10K/C100K)的 sysctl 配置
运行高并发服务(WebSocket、实时消息推送、API 网关)时,默认的 Linux 内核参数撑不住 C10K(1 万并发连接)甚至 C100K(10 万并发)。云数方舟 全节点服务器到手后,建议按以下配置调优内核参数。
完整 sysctl.conf 配置。编辑 /etc/sysctl.conf,追加:
# 最大文件描述符(需配合 /etc/security/limits.conf) fs.file-max = 2097152 # TCP 连接队列 net.core.somaxconn = 65535 net.core.netdev_max_backlog = 65535 net.ipv4.tcp_max_syn_backlog = 65535 # TIME_WAIT 优化 net.ipv4.tcp_max_tw_buckets = 1440000 net.ipv4.tcp_tw_reuse = 1 # net.ipv4.tcp_tw_recycle = 0 # Linux 4.12+ 已移除,勿设 # 端口范围 net.ipv4.ip_local_port_range = 1024 65535 # TCP 缓冲区 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 # 防 SYN Flood(已在 Day9 晚篇提及,此处完整列出) net.ipv4.tcp_syncookies = 1 # 连接追踪(如用 iptables/nftables) net.netfilter.nf_conntrack_max = 1048576
关键参数解释。
– tcp_max_tw_buckets:系统允许的最大 TIME_WAIT 连接数。高并发短连接服务会快速产生大量 TIME_WAIT,默认值 32768 不够,调大到 1440000。
– tcp_tw_reuse:允许将 TIME_WAIT 连接重新用于新连接(仅客户端模式)。对 API 服务(对外发起大量短连接)特别有用。
– somaxconn:listen 队列的最大长度。Nginx/Redis 的 backlog 不能超过此值。
– ip_local_port_range:本地端口范围。默认 32768-60999 只有约 28000 个端口,高并发时端口耗尽,调大到全范围。
生效与验证。sysctl -p 使配置生效。
验证:sysctl net.ipv4.tcp_max_tw_buckets 应返回 1440000。
同时编辑 /etc/security/limits.conf:
* soft nofile 1048576 * hard nofile 1048576
重新登录后 ulimit -n 应显示 1048576。
| 场景 | 并发连接数 | 关键参数 | 默认够用? |
|---|---|---|---|
| 普通网站 | < 1000 | 默认 | 够 |
| C10K | 1 万 | somaxconn, tw_reuse | 不够,需调优 |
| C100K | 10 万 | file-max, port_range, tw_buckets | 远远不够 |
行动建议。在 圣何塞独立服务器 或 香港云主机 上部署 WebSocket/实时推送服务前,务必应用上述 sysctl 配置。调优后可用 wrk 或 ab 做压力测试验证。记住:内核参数是高并发的”地基”,地基不打牢,应用层怎么优化都白搭。
📌 查看云数方舟全节点方案:
云数方舟官网 | 圣何塞独立服务器 | 香港云主机
本文由 云数方舟 技术团队原创发布,转载请注明出处。