1

即使我在检查现有 HTTP 连接时正确终止了所有内容,但我发现它们没有终止

例如,当我通过启动不同的任务打开 200 个并发连接时

我懂了

158 Established HTTP connections
927 TimeWait
95 SynSent
24 LastAck
6 CloseWait
34 FinWait

更糟糕的是,TimeWait 的数量每分钟都在增加

那么我怎样才能防止这样的问题发生呢?

一段时间后,窗口变得无法发出任何新请求

当我使用 webproxy 时会出现此问题:代理连接过多会杀死窗口的解析主机能力

在这里,当我使用 200 个不同代理的连接时

在此处输入图像描述

4

1 回答 1

1

TimeWait 状态的连接会产生性能问题。

首先看一下TCP状态图,

https://en.wikipedia.org/wiki/File:Tcp_state_diagram_fixed_new.svg

这是在机器的 TCP 发送 ACK 段以响应从其对等方收到的 FIN 段后的 TCP 连接状态(详细信息在 1981 年定义 TCP 的 RFC 793 http://www.ietf.org/rfc/rfc793 .txt)。在此状态期间,包括 TCB(TCP 控制块)和端口在内的套接字资源当然不会释放给操作系统。超时后,套接字资源被释放给操作系统。最初的原因是为了处理在不可靠介质中的同行之间可能发生的两将军问题。连接将处于 TimeWait 状态,直到一个可配置的超时,该超时具有取决于操作系统的默认值。

这些链接可以帮助您在 Windows 中设置 TcpTimedWaitDelay 参数:

https://technet.microsoft.com/en-us/library/cc938217.aspx http://msdn.microsoft.com/en-us/library/ee377084%28v=bts.10%29.aspx

它说默认值为 240 秒,但我是我的测试,我经历的时间较短(60 到 120 之间)。

无论如何,今天的网络更加可靠,需要高性能和吞吐量的 Web 服务应该会降低这个值。我建议将其设置为 5 秒。如果您想更保守一点,请将其设置为 30 秒。

其他可能对您有用的参数是 Windows 允许客户端打开的最大临时端口数。默认情况下,Windows Server 会限制临时 TCP 端口的最大数量。在某些 Windows 中,此值可能是 5000。您可以通过在注册表中设置值 MaxUserPort 来更改此行为。

于 2017-03-20T17:52:14.977 回答