开发者社区> 问答> 正文

TIME_WAIT会导致什么问题?

TIME_WAIT会导致什么问题?

展开
收起
令人无语的八阿哥 2021-10-12 17:23:35 485 0
1 条回答
写回答
取消 提交回答
  • 1)新建连接失败。

    TIME_WAIT 到 CLOSED,需要 2MSL=60s 的时间。这个时间非常长。每个连接在业务结束之后,需要60s的时间才能完全释放。如果业务上采用的是短连接的方式,会导致非常多的TIME_WAIT状态的连接,会占用一些资源,主要是本地端口资源。

    一台服务器的本地可用端口是有限的,也就几万个端口,由这个参数控制:

    sysctl net.ipv4.ip_local_port_range

    image.png

    当服务器存在非常多的 TIME_WAIT 连接,将本地端口都占用了,就不能主动发起新的连接去连其他服务器了。

    这里需要注意,是主动发起连接,又是主动发起关闭的一方才会遇到这个问题。

    如果是 server 端主动关闭 client 端建立的连接产生了大量的 TIME_WAIT 连接,这是不会出现这个问题的。除非是其中涉及到的某个客户端的 TIME_WAIT连接都有好几万个了。

    2)TIME_WAIT 条目超出限制。

    这个限制,是由一个内核参数控制的:

    sysctl net.ipv4.tcp_max_tw_buckets

    image.png

    超出了这个限制会报一条 INFO 级别的内核日志,然后继续关闭掉连接。并没有什么特别大的影响,只是增加了刚才提到的收到脏数据的风险而已。

    另外的风险就是,关闭掉 TIME_WAIT 连接后,刚刚发出的 ACK 如果对端没有收到,重发FIN包出来时,不能正确回复ACK,只是回复一个RST包,导致对端程序报错,说 connection reset。

    因此 net.ipv4.tcp_max_tw_buckets 这个参数是建议不要改小的,改小会带来风险,没有什么收益,只是表面上通过netstat看到的TIME_WAIT少了些而已,有啥用呢?

    并且,建议是当遇到条目不够,增加这个值,仅仅是浪费一点点内存而已。

    资料来源:电子书《ECS运维指南之Linux系统诊断》,下载链接:https://developer.aliyun.com/topic/download?id=143

    2021-10-12 17:43:51
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Near real-time networkanomaly 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载