MaxUserPort 设置似乎被忽略

MaxUserPort 设置似乎被忽略

我的一个 .NET 应用程序在大约 1 分钟内触发约 300 个 HTTP 请求时出现以下异常:

System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted

对此我能找到的唯一建议是调整MaxUserPort注册表中的设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

即使我已将此设置设为最大可能值,但仍然会发生异常。

答案1

事实证明,还有一种方法可以使用该netsh服务设置最大开放端口的限制。

您可以使用以下方法检查当前值:

netsh int ipv4 show dynamicport tcp

在我的情况下,它被设置为 256。您可以使用以下命令轻松更改它:

netsh int ipv4 set dynamic tcp start=45000 num=10000

无需重新启动。

出现此问题的原因是,即使您HttpClient在 .NET 中正确处理对象,套接字仍会TIME_WAIT在一段时间内保持状态。因此,即使连接是连续的,限制仍然适用。

答案2

默认情况下,TCP 端口不会立即关闭,而是保持 TIME_WAIT 状态 120 秒。

将此设置减少TcpTimedWaitDelay到 30 秒并将其设置StrictTimeWaitSeqCheck为 1 可能会提高您的 TCP 性能。

https://support.solarwinds.com/SuccessCenter/s/article/Tweaking-Windows-Server-performance-to-prevent-port-exhaustion-when-using-Orion-modules

相关内容