Cam*_*oSS 13 networking php windows-server-2012-r2
我们经常在专用服务器上遇到奇怪的网络问题。它在 Xeon E5620 上运行 Windows Server 2012 R2 x64,具有 16 GB RAM 和 Intel 82575EB 网络适配器。
请注意,我们已经调整HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
键值TcpTimedWaitDelay
,并MaxUserPort
分别以30和65530。
我们的网站在某个随机时间点停止响应,原因是它们无法连接到本地数据库。此问题开始发生时大约需要 2 周的正常运行时间。系统日志开始收到 TCPIP 警告 4227 和 4231。它指出“由于所有此类端口都在使用中,从全局 TCP 端口空间分配临时端口号的请求已失败。”。
如果我跑
Get-Counter -Counter \TCPv4\*
Run Code Online (Sandbox Code Playgroud)
或者
Get-Counter -Counter \TCPv6\*
Run Code Online (Sandbox Code Playgroud)
或者
netstat -abn | find /c ":"
Run Code Online (Sandbox Code Playgroud)
我总是得到 500-1500 个连接的合理值,这甚至不接近 65K 的限制。
此外,“localhost”在本地停止解析为 ::1,恢复为 127.0.0.1
只有强制重启机器才能解决这种情况。
会不会是网络适配器问题?
更新 1
当我重新启动邮件服务器时,它再次发生并且似乎已经解决。奇怪的是,所有计数器都显示了 ~1000 个连接,其中 ~500 个目前处于活动状态,并且在尝试连接到与邮件服务器无关的数据库时仍然出现 10055 套接字错误。
更新 2 这很奇怪,但是邮件服务的每日重启完全解决了这个问题。
小智 9
我在 WinSvr 2012R2 x64 上的 TCP/IP 端口池耗尽了近 1 个月的时间里遇到了类似的问题,其中服务器停止接收任何新的 TCP 连接。所以我使用了注册表值,这些值对我来说是稳定的:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
Run Code Online (Sandbox Code Playgroud)
结果和你一样。我认为您应该考虑审核您的应用程序/脚本性能的行为。如果一切正常并且没有任何帮助,那么您可以尝试将代理服务器放在 Web 应用程序服务器之前,使用 Web 服务器(IIS、Apache 等)创建 2 个节点,它们将共享相同的静态内容并同时访问相同的数据库时间(如果您的公司有足够的资源)。
也许这篇文章会以某种方式帮助你:http : //blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-important.aspx
在使用 chromewebdriver 运行大量 Selenium 测试的Windows Server 2016上也存在同样的问题。此 PS 脚本将自动配置上面共享的设置@Myke。添加该shutdown
命令是因为 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
Run Code Online (Sandbox Code Playgroud)
这是我们收到的错误消息,Webdriver.Quit()
告诉我们 TCP 地址正在使用中。
错误:EADDRINUSE 在 ClientRequest 处连接 EADDRINUSE 127.0.0.1:12843。(\node_modules\selenium-webdriver\http\index.js:238:15)
来自:任务:WebDriver.quit()
除了 Tcpip 驱动程序设置之外,临时 TCP 端口范围在 Windows Server 中使用netsh命令(源)进行管理。
您可以使用以下命令查看动态端口范围:
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
该设置 (start= 49152 num= 16384 ) 也是Windows Server 2008 以后的默认设置。
您是否确保没有泄漏数据库连接对象?您必须显式地(使用 try-finally)或使用 using { } 块关闭每个打开的数据库连接。这是 ASP 不会直接告诉您的常见问题。
归档时间: |
|
查看次数: |
87792 次 |
最近记录: |