【发布时间】: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