现象: 连接服务器时,有一定的几率会连接不上。
结果: 最终发现,是服务器的tcp_tw_recycle设置为了1, 由于时间戳的原因,导致有些包被丢弃。
参考: http://www.cnxct.com/coping-with-the-tcp-time_wait-state-on-busy-linux-servers-in-chinese-and-dont-enable-tcp_tw_recycle/ https://www.cnblogs.com/lulu/p/4149312.html
在服务端,不要启用net.ipv4.tcp_tw_recycle,除非你能确保你的服务器网络环境不是NAT。 在服务端,不要启用net.ipv4.tw_reuse,启用net.ipv4.tw_reuse对于连接进来的TCP连接来说,并没有任何卵用。
在客户端(尤其是服务器上,某服务以客户端形式运行时,比如上面提到的nginx反代,连接着redis、mysql的FPM等等)上启用net.ipv4.tcp_tw_reuse,还算稍微安全的解决TIME-WAIT的方案。
TIME-WAIT多就多吧,存在即合理。
还有个时间戳,貌似也该禁用,默认貌似是1 net.ipv4.tcp_timestamps=0
http://blog.csdn.net/gzh0222/article/details/8000508 ----------------------------------------------------
(1)执行vim /etc/sysctl.conf
(2) 直接明确写上: net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_timestamps = 0
保存,然后 sysctl -p
|