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重用和快速回收。

你可能感兴趣的:(TCP TIME_WAIT 出现过多?)