Windows Server 2012 R2用尽临时端口,但它不应该

我们在专用服务器上经常遇到与networking有关的奇怪问题。 它在具有16 GB RAM和Intel 82575EBnetworking适配器的Xeon E5620上运行Windows Server 2012 R2 x64。

请注意,我们已经将HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters键值TcpTimedWaitDelayMaxUserPort分别调整为30和65530。

在随机的时间点,我们的网站停止响应,原因是他们无法连接到本地数据库。 当这个问题开始发生的时间大概是2个星期的正常运行时间。 系统日志开始获取TCPIP警告4227和4231.It声明“从全局TCP端口空间分配临时端口号的请求失败,因为所有这些端口正在使用中”。

如果我跑

 Get-Counter -Counter \TCPv4\* 

要么

 Get-Counter -Counter \TCPv6\* 

要么

 netstat -abn | find /c ":" 

我总是得到500-1500个连接的合理值,甚至没有接近65K的限制。

此外,“本地主机”停止parsing为:: 1本地,恢复到127.0.0.1
只有强制重启机器才能解决问题。

它可能是一个networking适配器的问题?

更新1

它再次发生,似乎已经解决了,当我重新启动邮件服务器。 奇怪的是,所有的计数器都显示~500个连接,当前正在激活~500个,并且在尝试连接到与邮件服务器无关的数据库时仍然出现10055套接字错误。

更新2这是奇怪的,但邮件服务每天重新启动修复问题完全。

在WinSvr 2012R2 x64的TCP / IP端口池已经耗尽了近一个月的时间,服务器停止接收任何新的和TCP连接的情况下,我遇到了类似的问题。 所以我玩了registry值,这些对我来说是稳定的:

 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "TcpTimedWaitDelay"=dword:0000001e "MaxUserPort"=dword:0000fffe "TcpNumConnections"=dword:00fffffe "TcpMaxDataRetransmissions"=dword:00000005 
  • TcpTimedWaitDelay – 30
  • MaxUserPort – 65534
  • TcpNumConnections – 应该处于默认状态拉伸到最大= 16777214应该防止服务器耗尽临时端口。
  • TcpMaxDataRetransmissions – 实际连接上的TCP未确认数据段重传超时限制= 5。

结果和你一样。 我认为你应该考虑审核你的应用程序/脚本性能的行为。 如果一切正常,没有任何帮助,那么你可以尝试在你的Web应用服务器之前放置代理服务器,用Web服务器(IIS,Apache,…)创build2个节点,它们将共享相同的静态内容并访问相同的数据库时间(如果你的公司有足够的资源)。

也许这篇文章会以某种方式帮助你: http : //blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- S-important.aspx

你确定你没有泄漏数据库连接对象吗? 您必须closures打开的每个数据库连接(显式地使用try-finally)或使用{}块。 这是ASP不会直接告诉你的常见问题。

除Tcpip驱动程序设置之外,临时TCP端口范围在Windows Server中使用netsh命令( 源 )进行pipe理。

您可以使用以下命令查看dynamic端口范围:

  • netsh int ipv4 show dynamicport tcp
  • netsh int ipv4 show dynamicport udp
  • netsh int ipv6 show dynamicport tcp
  • netsh int ipv6 show dynamicport udp

更改端口范围,请使用以下命令:

  • netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

例如:

netsh int ipv4 set dynamicport tcp start=49152 num=16384

设置(开始= 49152 num = 16384 )也是Windows Server 2008之后的默认设置

如果在Windows Server 2016上使用chromewebdriver运行大量的Seleniumtesting,也会出现同样的问题。 这个PS脚本会自动configuration上面共享的设置@Myke。 添加了shutdown命令,因为TCP堆栈更改需要重新启动。

增加临时TCP端口的池大小

 Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name MaxUserPort -Value 65534 -Force | Out-Null Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpTimedWaitDelay -Value 30 -Force | Out-Null Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpNumConnections -Value 16777214 -Force | Out-Null Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpMaxDataRetransmissions -Value 5 -Force | Out-Null shutdown -r -t 0 

这是我们在Webdriver.Quit()上收到的错误消息,告诉我们TCP地址正在使用中。

错误 :EADDRINUSE在ClientRequest处连接EADDRINUSE 127.0.0.1:12843。 (\ node_modules \selenium的webdriver \ HTTP \ index.js:238:15)
来自 :任务:WebDriver.quit()