因此,我在一台服务器上有应用程序A,该服务器每秒向另一台服务器上的应用程序B发送710 HTTP POST消息,该应用程序B正在单个端口上侦听。连接不是保持活动状态;他们是封闭的。
几分钟后,应用程序A报告无法打开与应用程序B的新连接。
我正在两台计算机上连续运行netstat,并且发现每台计算机上都打开了大量TIME_WAIT连接。几乎所有显示的连接都在TIME_WAIT中。从在线阅读来看,这似乎是双方关闭连接后30秒钟(根据/ proc / sys / net / ipv4 / tcp_fin_timeout值,在我们的计算机上为30秒钟)的状态。
我在不断运行的每台计算机上运行一个脚本:
netstat -na | grep 5774 | wc -l
Run Code Online (Sandbox Code Playgroud)
和:
netstat -na | grep 5774 | grep "TIME_WAIT" | wc -l
Run Code Online (Sandbox Code Playgroud)
在应用程序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个正在关闭...
我唯一能想到的是操作系统缓慢关闭连接。