TCP连接大量TIME_WAIT状态问题排查
2018-01-17 19:14
627 查看
TIME_WAIT连接过多
TIME_WAIT的产生
TIMEWAIT是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接时产生的。TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的。服务器在处理客户端请求的时候,如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问题。如果你的服务器设计为被动关闭,那么你首先要关注的是CLOSE_WAIT。TIME_WAIT状态的必要性
确保被关闭端有足够时间收到ACK,如果被关闭方没收到ACK,则会重发FIN,一来一去正好2个MSL;有足够的时间不让当前连接和后面的连接混在一起(有些路由器会缓存IP数据包,如果连接被重用了,那么这些延迟收到的数据包可能会跟新连接混在一起)。
大量TIME_WAIT出现场景
在高并发短连接的TCP服务器上,当服务器处理完请求后立刻按照主动正常关闭连接这个场景下,会出现大量socket处于TIMEWAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。大量TIME_WAIT解决方案
缩短MSL时间。增加可用端口数量。可用端口数量=单进程可打开的连接数量*机器数量。
MSL时间
RFC793定义MSL为2分钟。查看:sysctl -a | grep time | grep wait
修改:
vi /etc/sysctl.conf;
net.ipv4.tcp_fin_timeout = 30;
执行 /sbin/sysctl -p 让参数生效;
TIME_WAIT的重用和快速回收
打开方式:设置TCP参数 net.ipv4.tcp_tw_reuse = 1 和 net.ipv4.tcp_tw_recycle = 1;注意:使用tcp_tw_reuse和tcp_tw_recycle解决TIME_WAIT过多问题是非常危险的,参考RFC
Allow to reuse TIME-WAIT sockets for new connections when it is safe from protocol viewpoint. Default value is 0. It should not be changed without advice/request of technical experts.
参考:http://blog.csdn.net/yusiguyuan/article/details/21445883
相关文章推荐
- TCP连接大量CLOSE_WAIT状态问题排查
- mysql服务器,大量tcp连接状态TIME_WAIT
- Linux网络tcp连接大量CLOSE_WAIT和TIME_WAIT状态的出现和解决方法
- LINUX下解决time_wait连接过多和同一IP连接过多的问题 及 TCP/IP TIME_WAIT状态原理
- linux服务器出现大量的TIME_WAIT状态的TCP连接的处理办法
- tcp短连接TIME_WAIT问题解决方法大全(2)——SO_LINGER
- TCP连接状态详解及TIME_WAIT过多的解决方法
- [经验随笔]大量close_wait状态连接问题的分析与解决
- 一个解除TCP连接的TIME_WAIT状态限制的简便方法
- 理解tcp关闭连接中的time_wait状态
- 【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇
- TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇
- tcp短连接TIME_WAIT问题解决方法大全(3)——tcp_tw_recycle
- 解决系统存在大量TIME_WAIT状态的连接
- netstat监控大量ESTABLISHED连接与Time_Wait连接问题
- tcp短连接TIME_WAIT问题解决方法大全(4)——tcp_tw_reuse
- netstat监控大量ESTABLISHED连接与Time_Wait连接问题
- 当出现大量timewait状态的连接时,该如何处理?
- [总结]数据库连接池设置不当导致大量的本地连接出现time_wait状态。
- 服务器产生大量CLOSE_WAIT状态的socket问题的排查过程