对外提供tcp服务的进程,在压测时发现,tcp连接syn响应慢,甚至不响应。导致无法正常接收新的请求,影响业务。
抓包分析:

如上有大量的重传,有时能够正常的响应请求,有时就无法响应请求。
1、系统负载是否过高
2、是否有安全软件(比如安全狗,安骑士等)
3、是否开启防火墙
4、snat问题
5、tcp相关参数:net.ipv4.tcp_max_syn_backlog\net.ipv4.tcp_syncookies\fs.file-max等
6、系统最大文件打开数是否有限制
7、进程最大文件打开数是否有限制
8、业务程序是否有相关的安全限制
9、协议栈异常
10、网络安全设备原因
12月2日增加:
1、由于服务端收包时checksum错误,内核会默认丢弃该报文;
2、列队满了
其中recv-q表示当前accept queue中的连接数量,send-q表示accept queue的最大长度。如上:可以看到进程的accept queue默认是128,因为受到系统net.core.somaxconn=128的限制。
根据排查思路中的几个关键点,进行逐一仔细确认:
1、检查系统负载是否正常
2、是否有安全软件:关闭安骑士服务,检查系统进程是否有其他安全软件进程
3、关闭系统防火墙:排除由于防火墙安全配置导致的问题。
4、snat问题:根据问题环境判断,是否有该问题,如有根据案例方式处理。
5、检查tcp相关参数:调大相关参数:
net.ipv4.tcp_max_syn_backlog\net.ipv4.tcp_syncookies\fs.file-max等
6、系统最大文件打开数是否有限制:
主要关注open files信息
7、查看进程最大文件打开数限制
进程的调整方法:
如果上述方法无法使用,或者不生效,则:
prlimit要2.6.36版本+才行
8、业务程序是否有相关的限制(联系用户确认)
9、协议栈异常;尝试初始化。
针对问题:tcp连接失败
分析:netstat -s输出中和连接失败相关的参数
`202270382 invalid syn cookies received
--- 三次握手ack包,syncookies校验没通过;
13700572 resets received for embryonic syn_recv sockets
---syn_recv状态下,收到非重传的syn包,则返回reset
1123035 passive connections rejected because of time stamp
---开启sysctl_tw_recycle,syn包相应连接的时间戳 小于 路由中保存的时间戳;
14886782 failed connection attempts
--- syn_recv状态下,socket被关闭; 或者 收到syn包(非重传)
438798 times the listen queue of a socket overflowed
---收到三次握手ack包,accept队列满
438798 syns to listen sockets ignored
---收到三次握手ack包,因各种原因(包括accept队列满) 创建socket失败`