问题现象
Linux系统服务器中FIN_WAIT2,CLOSE_WAIT状态的TCP链接过多,服务不能及时响应。
通过命令 netstat –ant|grep FIN_WAIT2|wc –l
查看连接数,发现值很大,这点不正常。
原因分析
- 在HTTP服务中,Server由于某种原因会主动关闭连接,例如KEEPALIVE超时的情况下,作为主动关闭连接的Server就会进入FIN_WAIT2状态。
- 在TCP/IP协议栈中,存在半连接的概念,FIN_WAIT2状态不算超时(不像TIME_WAIT状态),如果Client不关闭,FIN_WAIT2状态将保持到系统重启,越来越多的FIN_WAIT2状态会致使内核Crash。
- 建议调小
net.ipv4.tcp_fin_timeout
参数的值,以便加快系统关闭处于FIN_WAIT2
状态的TCP连接。
解决方法
修改各种有关TCP连接的参数。/etc/sysctl.conf
是用来控制linux网络的配置文件,对于依赖网络的程序(如web服务器和cache服务器)非常重要。
- 修改
/etc/sysctl.conf
文件
vim /etc/sysctl.conf
修改或增加以下内容:
#