背景:线上环境登陆页,大量请求超时无响应。检查网正常,服务器CPU,内存等参数也都正常。ruby
参考:https://www.jianshu.com/p/893b5d7e9f30服务器
缘由:服务器启用了net.ipv4.tcp_tw_recycle机制tcp
当开启了tcp_tw_recycle
选项后,当链接进入TIME_WAIT
状态后,会记录对应远端主机最后到达分节的时间戳。若是一样的主机有新的分节到达,且时间戳小于以前记录的时间戳,即视为无效,相应的数据包会被丢弃;spa
一个公网IP(通过NAT)大量地去反问服务器,不一样客户端的时间可能不一致,因此就会出现时间戳错乱的现象,因而后面的数据包就被丢弃了,具体的表现一般是是客户端明明发送的SYN,但服务端就是不响应ACK,还能够经过下面命令来确认数据包不断被丢弃的现象;code
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
解决:ip
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_timestamps = 0内存