故障现象
查看错误日志,发现偶尔有java.net.SocketTimeoutException: connect timed out异常。通过netstat -an |grep 443 |grep TIME_WAIT|wc -l
命令可以检测明显发现,服务器建立的TCP链接有500多个处于TIME_WAIT状态,其中443为目标机器端口。
解决方案
优化系统TCP配置,开启重用,配置文件为/etc/sysctl.conf。
net.ipv4.tcp_tw_reuse = 1
是否开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 0
是否开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout = 15
如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间;