【问题标题】:What could cause so many TIME_WAIT connections to be open?什么可能导致打开这么多 TIME_WAIT 连接?
【发布时间】:2016-01-15 14:43:15
【问题描述】:

所以,我在一台服务器上有应用程序 A,它每秒向另一台服务器上的应用程序 B 发送 710 条 HTTP POST 消息,该服务器正在侦听单个端口。连接不是保持活动的;他们是关闭的。

几分钟后,应用程序 A 报告它无法打开与应用程序 B 的新连接。

我在两台机器上连续运行 netstat,发现每台机器上都打开了大量的 TIME_WAIT 连接。几乎所有显示的连接都在 TIME_WAIT 中。从网上看,这似乎是双方关闭连接后 30 秒的状态(在我们的机器上,根据 /proc/sys/net/ipv4/tcp_fin_timeout 的值是 30 秒)。

我在每台机器上都运行了一个脚本,该脚本一直在运行:

netstat -na | grep 5774 | wc -l

和:

netstat -na | grep 5774 | grep "TIME_WAIT" | wc -l

在应用程序 A 报告它无法打开与应用程序 B 的新连接之前,每台计算机上的每个值似乎达到了 28,000 左右。

我读过这个文件:/proc/sys/net/ipv4/ip_local_port_range 提供了一次可以打开的连接总数:

$ cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000

61000 - 32768 = 28232,这与我看到的大约 28,000 个 TIME_WAIT 一致。

我的问题是 TIME_WAIT 怎么可能有这么多连接。

似乎每秒关闭 710 个连接,在给定时间我应该看到大约 710 * 30 秒 = 21300 个。我想仅仅因为每秒有 710 被打开并不意味着每秒有 710 被关闭......

我能想到的唯一另一件事是操作系统关闭连接的速度很慢。

【问题讨论】:

    标签: tcp network-programming netstat


    【解决方案1】:

    TCP 的 TIME_WAIT 表示本地端点(此端)已关闭连接。连接被保留,以便任何延迟的数据包都可以与连接匹配并得到适当的处理。连接将在四分钟内超时时被删除。

    假设所有这些连接都有效,那么一切正常。您可以通过让远程端关闭连接来消除 TIME_WAIT 状态,或者您可以修改系统参数以增加回收率(尽管这样做可能很危险)。

    Vincent Bernat 有一个excellent article on TIME_WAIT and how to deal with it

    Linux 内核文档对 net.ipv4.tcp_tw_recycle 的作用不是很有帮助:

    启用快速回收 TIME-WAIT 套接字。默认值为 0。它应该 未经技术专家的建议/请求,不得更改。

    它的兄弟net.ipv4.tcp_tw_reuse 有更多文档记录,但语言大致相同:

    允许在安全的情况下为新连接重用 TIME-WAIT 套接字 从协议的角度来看。默认值为 0。不应更改 无需技术专家的建议/要求。

    缺乏文档的唯一结果是我们发现许多调整指南建议将这两个设置都设置为 1 以减少处于 TIME-WAIT 状态的条目数。然而,正如tcp(7) 手册页所述,net.ipv4.tcp_tw_recycle 选项对于面向公众的服务器来说是相当有问题的,因为它不会处理来自同一 NAT 设备后面的两台不同计算机的连接,这是一个难以检测和等待的问题咬你:

    启用 TIME-WAIT 套接字的快速回收。启用此选项是 不推荐,因为这会在使用 NAT 时导致问题 (网络地址转换)。

    【讨论】:

    • 为什么是 4 分钟?你是说我的 /proc/sys/net/ipv4/tcp_fin_timeout 值 30 秒无效?
    • 谢谢,我会看看你的文章。至于TIME_WAIT的定义,根据这张图,我看双方都关闭了连接,不只是这边:cs.northwestern.edu/~agupta/cs340/project2/…。如果我看错了,请告诉我。
    • 好的,现在我认为 30 秒是 MSL,并且 TIME_WAIT 状态是这个的两倍,所以 60 秒,因为在您链接的文章中,它说:“RFC 793要求 TIME-WAIT 状态持续两倍于 MSL 的时间。”
    • 是的,双方都已关闭,但TIME_WAIT仅在本地先关闭时发生。状态的重点是清除传输中的数据包。如果您的连接都是本地的,那么这不是问题。如果他们在地球的另一边,它可以。
    猜你喜欢
    • 2010-12-16
    • 2017-12-03
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2016-10-15
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多