本来生活很美好,线上环境很稳定,但是我有一台nginx服务器,centos7.4,突然出现偶尔远程连接失败的问题,而且很频繁,那能怎么办?只能先尝试下阿里云后台连接是否正常,然后发现后台连接一切ok。


然后我就一脸懵逼,线上业务并没有出现任何中断的情况,这说明什么,说明网络是正常的呀!然后我为了确定,在连接不是的时候进行ping,ok,没有丢包,杠杠的,用以防是防火墙作怪,关闭吧!然后检查系统的登陆安全日志,居然没有任何问题。


。。。。然而并没有那什么XX用,好吧telnet测试端口吧,嗯,出问题的时候telnet失败,那。。。。好奇怪,百度和google没有找到解决方案呐,不服气也没有办法,我只能联系下阿里云客服了,开工单总可以吧,他们有专业的人。


经过一系列的判断,windows抓包吧,从本机连接到服务器的过程进行抓包,终于在阿里云工程师的分析帮助下(好吧我承认我对网络抓包分析不是很了解)。最终问题找到了,tcp连接没有成功,内核两个参数的设置:

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_tw_recycle = 1

网上资料的确说可能会导致莫名的网络问题,真的就导致了,,,,瞬间想骂人,因为我其它web服务器配置内核参数一样的,但是只有这一台有问题,问原因,,好吧他们没说,具体为什么就作罢吧


阿里云客服说,都改成0吧,我就改了下net.ipv4.tcp_timestamps = 0,哦,完蛋了,php没有改导致大量连不上了,好吧,暂时不能改这个,

我就先net.ipv4.tcp_tw_recycle = 0

ok,time_wait的确增多了,但是我目前连接也没有问题了,线上也一切正常

至于这两个参数,以后还是默认不开启把,net.ipv4.tcp_tw_recycle是启用TIME-WAIT状态sockets的快速回收,需要依赖net.ipv4.tcp_timestamps的开启,而net.ipv4.tcp_timestamps容易导致时间戳问题,具体的不详细介绍了

问题解决才是正解