1. 高并发网络性能瓶颈的典型表现
最近在排查一个线上服务异常时,发现当并发连接数突破2万后,服务开始出现响应延迟和连接失败的情况。通过netstat和ss命令查看TCP连接状态,发现TIME_WAIT状态的连接堆积超过2000个,同时存在少量CLOSE_WAIT状态的异常连接。更严重的是,在业务高峰期,新连接建立超时的情况频繁发生。
1.1 问题环境分析
我们的服务器配置如下:
- 8核vCPU
- 16GB内存
- 4Gbps网络带宽
- 80万PPS(Packets Per Second)处理能力
初始的内核网络参数配置如下:
bash复制net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 131072
net.ipv4.ip_local_port_range = 1024 61999
这些默认配置在高并发场景下暴露出几个关键问题:
- 半连接队列(SYN队列)大小不足,导致SYN洪水攻击时容易溢出
- 本地端口范围较窄,在大量短连接场景下容易耗尽
- 内存缓冲区限制过严,影响大流量下的吞吐性能
1.2 TCP状态监控技巧
要准确诊断网络性能问题,首先需要掌握TCP连接状态的监控方法。我常用的实时监控命令是:
bash复制watch -n 1 'netstat -ant | awk '\''/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'\'''
这个命令会每秒刷新一次,显示各种TCP状态的连接数统计。重点关注几个状态:
- ESTABLISHED:正常活动连接数
- TIME_WAIT:等待关闭的连接数
- SYN_RECV:半连接数(可能遭受SYN洪水攻击)
- CLOSE_WAIT:被动关闭等待本地关闭的连接(可能应用未正确关闭连接)
对于半连接队列的专项检查,我推荐使用:
bash复制ss -ntp state syn-recv # 查看SYN_RECV连接详情
netstat -s | grep -i 'listen drops' # 监控队列溢出情况
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
