TIME_WAIT 状态会导致什么问题,怎么解决

我们考虑高并发短连接的业务场景,在高并发短连接的 TCP 服务器上,当服务器处理完请求后主动请求关闭连接,这样服务器上会有大量的连接处于 TIME_WAIT 状态,服务器维护每一个连接需要一个 socket,也就是每个连接会占用一个文件描述符,而文件描述符的使用是有上限的,如果持续高并发,会导致一些正常的 连接失败。

解决方案:修改配置或设置 SO_REUSEADDR 套接字,使得服务器处于 TIME-WAIT 状态下的端口能够快速回收和重用。

下面是读者提供的具体操作

修改配置文件:/etc/sysctl.conf

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

发表评论

后才能评论

评论(2)

  • 文峯 普通 2022-04-29 10:58 上午

    过多的 TIME-WAIT 状态主要的危害有两种:

    第一是内存资源占用;
    第二是端口资源的占用,一个 TCP 连接至少消耗「发起连接方」的一个本地端口;

  • 文峯 普通 2022-04-12 5:01 下午

    SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。