天天看点

Linux OS||不响应SYN总结背景 排查思路 排查过程最后那三板斧

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

抓包分析:

Linux OS||不响应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版本+才行

Linux OS||不响应SYN总结背景 排查思路 排查过程最后那三板斧

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失败`

继续阅读