跳转到主要内容

提高 Linux 并发连接容量

检查并调整文件描述符与 TCP 监听队列,解决高并发系统瓶颈

高并发隧道同时受进程文件描述符、监听队列、临时端口、连接跟踪和内存限制。只有监控或日志表明达到系统上限时才应调整;单纯增大参数不能弥补 CPU、内存或带宽不足。

先检查现状

ulimit -n
sysctl net.core.somaxconn net.ipv4.tcp_max_syn_backlog
ss -s
cat /proc/sys/fs/file-nr

常见日志包括 too many open files、监听队列溢出或大量连接停留在异常状态。先估算 NPS、NPC、目标服务以及监控进程共同需要的文件描述符数量。

文件描述符

使用 systemd 运行 NPS 时,在服务覆盖配置中设置,而不是只修改当前终端的 ulimit:

# systemctl edit nps
[Service]
LimitNOFILE=1048576

应用并重启服务:

systemctl daemon-reload
systemctl restart nps
cat /proc/$(pidof nps)/limits | grep 'open files'

实际服务名可能不同,请以安装时注册的 unit 为准。

监听队列

可按压测结果建立 /etc/sysctl.d/99-nps.conf:

net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192

然后执行:

sysctl --system

somaxconn 限制已完成握手的监听队列,tcp_max_syn_backlog 影响尚未完成握手的 SYN 队列。数值应结合内存、连接速率和攻击面压测确定,不建议照搬极端配置。

排障边界

  • 大量出站连接失败时检查本机临时端口范围和 TIME_WAIT,不要先启用危险的连接复用参数。
  • 使用容器时还要检查容器的 nofile 限制、宿主机 conntrack 和端口发布规则。
  • SYN flood 应由防火墙、云安全组或专业防护处理,内核队列调大不是访问控制。
  • NPS 的客户端最大连接数 是应用级保护,不能替代系统容量限制。