TCP TIME_WAIT 出现过多?

当你关闭一个 socket 时,主动关闭一端的 socket 将进入 TIME_WAIT 状态,而被动关闭一方则转入CLOSED状态。

1. 为什么设计TIME_WAIT

当一端调用close()时,就说明本端没有数据要发送了。我们没有任何机制保证最后的一个ACK能够正常传输,第二,网络上仍然有可能有残余的数据包(wandering duplicates),我们也必须能够正常处理。


2.问题点

在高并发短连接的TCP服务器,当服务器处理完 请求后立刻按照主动正常 关闭连接。。。这个场景下, 会出现大量socket处于 TIMEWAI T 状态。如果客户端的并发量持续很高, 此时部分客户端就会显示 连接不上。

3、解决

只能尝试修改内核,sysctl改两个内核参数就行了,如下:

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

简单来说,就是打开系统的TIMEWAIT重用和快速回收。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容