Linux网络服务并发能力需通过可复现压测路径、精准指标采集与系统参数联动验证,核心是明确测连接数还是QPS:前者监控ESTABLISHED连接、文件描述符及TIME_WAIT;后者关注P95延迟拐点、错误率与CPU软中断,并须调优nofile、tcp_tw_reuse、somaxconn等内核参数。
Linux 网络服务的并发连接能力不是靠猜出来的,而是通过可复现的压测路径+精准指标采集+系统级参数联动验证出来的。关键不在于“跑多少并发”,而在于“在什么条件下、哪些指标开始劣化、瓶颈卡在哪一层”。
这两个目标对应完全不同的压测设计:
netstat -ant | awk '$6 ~ /ESTABLISHED/ {++n} END {print n}'、文件描述符使用率(lsof -p $PID | wc -l)、TIME_WAIT/CLOSE_WAIT 数量变化。siege -c 2000 -t 2m -f urls.txt 或 wrk -t4 -c400 -d120s http://api.example.com 更合适;结果看 P95 延迟突增点、错误率拐点、服务端 CPU 软中断(top 中 %si)是否飙升。否则压测结果无效——你测的不是服务,是 Linux 默认配置的短板:
/etc/security/limits.conf,为运行用户加 * soft nofile 65536 和 * hard nofile 65536,并确认服务进程启动时生效(cat /proc/$PID/limits | grep "Max open files")。net.ipv4.tcp_tw_reuse = 1(允许 TIME_WAIT 端口被新连接复用),配合 net.ipv4.ip_local_port_range = 1024 65535 扩大临时端口池。net.core.somaxconn 和应用 listen() 的 backlog 参数设为一致(如 65535),同时调大 net.ipv4.tcp_max_syn_backlog 至 65535,防止 SYN Flood 或突发建连丢包。net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem,例如千兆网卡常用 4096 262144 16777216(min/default/max 字节)。不同场景选不同工具,避免用错导致误判:
iperf3(TCP/UDP 模式),排除应用逻辑干扰,定位链路或网卡瓶颈。wrk(高并发低开销)或 siege(支持 URL 列表与会话保持),注意开启 keepalive(-H "Connection: keep-alive")以区分连接建立开销与真实处理开销。go-wrk、tsung 或自研 client,模拟真实协议握手与心跳逻辑,观察连接泄漏(CLOSE_WAIT 持续增长)与内存缓慢上涨。不要只看“最大并发数”,要识别指标拐点:
net.ipv4.tcp_tw_reuse 已启用,说明端口复用已达极限,需检查客户端连接复用策略或服务端连接空闲超时设置。ss -ltn 查看),表明应用读取速度跟不上内核收包速度,是应用层处理瓶颈而非网络问题。