我可以使TCP / IP会话运行less于60秒吗?

我们的服务器超载TCP / IP会话,我们有1200 – 1500。 他们大多数都挂在TIME_OUT状态。 事实certificate,处于TIME_OUT状态的连接占用一个套接字,直到经过60秒的超时。

问题是服务器无响应,许多客户端没有得到服务。

我做了一个简单的testing:使用Internet Explorer 8.0从服务器上下载一个XML文件下载在几秒钟内完成。 但后来我看到TCP / IP连接挂在TIME_OUT状态60秒。

有什么办法摆脱TIME_OUT等待,或者减less释放新连接的套接字?

我明白为什么TCP / IP连接进入TIME_OUT状态,但我不明白为什么Internet Explorer在XML文件下载结束后没有closures连接。

细节。

我们的服务器运行用Perl(mod-perl)编写的web服务。 该服务向客户提供天气数据。 客户端是一个Flash应用程序(实际上是embedded在Windows应用程序中的Flash ActiveX控件)。

操作系统:Ubuntu

Apache“Keep Alive”选项设置为0

这是您的TCP堆栈中的一个设置。 由于我们不知道你在哪个平台上,所以我们不能确切地说出它是什么,以及如何改变它。

UPDATE

所以你使用的是Ubuntu。 您可以使用sysctlnet.inet.tcp.msl值减less到期望的TIME_WAIT持续时间的一半(以毫秒为单位 – 请参阅man -S 4 tcp ),例如, sysctl net.inet.tcp.msl=2500 。 请注意这样做对于在TIME_WAIT时间过后可能到达的TIME_WAIT数据包的影响。

我假设你的意思是TIME_WAIT 。 启动主动closures的对等体是进入TIME_WAIT (请参阅此处的状态转换图),如果您可以让客户机closures连接,则可以将TIME_WAIT移动到客户机。 看到这个答案更多的细节和一个关于TIME_WAIT问题的好文章的链接,以及如何解决它们。

另一种方法是,如果你不能让客户端发出主动closures,则在closures之前将linger设置为false来重置连接。 这导致发送RST而不是FIN

服务器无响应可能与TIME_WAIT状态下的连接数量无关。 目前还不清楚“占用套接字”是什么意思 – 服务器应该在此时close套接字。 系统应该能够处理TIME_WAIT状态下的数万个连接。