IIS7 在 CLOSE_WAIT 中有数百个连接

rjl*_*pes 3 iis windows-server-2008 tcpip iis-7 web-server

我的 IIS7 服务器上有一个 .Net 应用程序,它运行良好,直到我不得不将它移到另一台服务器上。

我将完全相同的代码移到新服务器上,我注意到几个小时后网站停止响应远程请求,但是如果我对服务器进行远程桌面,它会响应对本地主机的请求。如果我停止网站和应用程序池,它会再次开始正常工作。

我能够将问题跟踪到数百个处于 CLOSE_WAIT 状态的请求到从未关闭的 http 端口(我等了几个小时,它们保持不变)。

有什么想法吗?

Gre*_*kew 5

你的 http.sys 是什么版本?您可能想尝试以下更新:

如果连接是通过负载平衡器连接到运行 Windows Vista、Windows 7、Windows Server 2008 或 Windows Server 2008 R2 的计算机的 HTTP 连接会增加延迟
http://support.microsoft.com/kb/2634328

您还应该确认 TCP KeepAliveTime 的值。默认情况下,这设置为两个小时。降低这个值通常是个好主意,尤其是对于面向 Internet 的 Web 服务器。在许多情况下五分钟效果很好,尽管您可能希望将其设置为与会话状态超时相同(默认为 20 分钟),以便您的 Web 开发人员不会讨厌您。要将值设置为 20 分钟,请使用十六进制双字值 0x00124F80:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]  
"KeepAliveTime"=dword:00124F80  
Run Code Online (Sandbox Code Playgroud)

KeepAliveTime
键:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
值类型:REG_DWORD—时间以毫秒为单位
有效范围:1–0xFFFFFFFE
默认值:7,200,000(两小时)
说明:该值控制 TCP 尝试验证通过发送保持活动数据包,空闲连接仍然完好无损。如果远程系统仍可访问并正常运行,则它会确认保持活动传输。默认情况下不发送保持活动数据包。应用程序可以在连接上启用此功能。

另一个潜在的嫌疑人是 Windows 的高级 TCP/IP 功能。这些功能可能会引入微妙且难以诊断的问题,并且驱动程序必须坚如磐石。由于大多数 HP 和戴尔服务器都配备 Broadcom 芯片,而 Broadcom 以在这些功能方面有缺陷的驱动程序而闻名,这是值得考虑的事情。我个人禁用这些功能,除非我可以证明启用它们的可衡量的好处。以下是在提升的命令提示符下输入的命令,这些命令将禁用这些功能:

netsh interface tcp show global  
netsh interface tcp set global autotuninglevel = disabled  
netsh interface tcp set global rss = disabled  
netsh interface tcp set global chimney = disabled  
netsh interface tcp set global netdma = disabled  
Run Code Online (Sandbox Code Playgroud)