我们的服务器因 TCP/IP 会话而超载,有 1200 - 1500 个会话。其中大多数处于 TIME_OUT 状态。事实证明,处于 TIME_OUT 状态的连接会占用套接字,直到 60 秒超时结束。
问题是服务器没有响应,许多客户端无法获得服务。
我做了一个简单的测试:使用 Internet Explorer 8.0 从服务器下载一个 XML 文件。下载在几分之一秒内完成。但随后我发现 TCP/IP 连接处于 TIME_OUT 状态长达 60 秒。
有什么方法可以摆脱 TIME_OUT 等待或者减少释放套接字以进行新连接的时间?
我理解为什么 TCP/IP 连接进入 TIME_OUT 状态,但我不明白为什么 Internet Explorer 在 XML 文件下载结束后不关闭连接。
细节。
我们的服务器运行用 Perl (mod-perl) 编写的 Web 服务。该服务向客户端提供天气数据。客户端是一个 Flash 应用程序(实际上是嵌入在 Windows 应用程序中的 Flash ActiveX 控件)。
操作系统:Ubuntu
Apache“Keep Alive”选项设置为 0
答案1
这是 TCP 堆栈中的设置。由于我们不知道您使用的是哪个平台,因此我们无法确切地说出它的名称以及如何更改它。
更新
所以你使用的是 Ubuntu。你可以使用sysctl
将值减少net.inet.tcp.msl
到所需TIME_WAIT
持续时间的一半(以毫秒为单位 - 请参阅man -S 4 tcp
),例如sysctl net.inet.tcp.msl=2500
。请注意这样做可能会对在期限过后到达的漫游数据包产生影响TIME_WAIT
。
答案2
答案3
服务器无响应可能与处于 TIME_WAIT 状态的连接数无关。不清楚您所说的“占用套接字”是什么意思——服务器应该早就占用了close
套接字。系统应该能够处理数万个处于 TIME_WAIT 状态的连接。