IIS7 中数百个连接处于 CLOSE_WAIT 状态

IIS7 中数百个连接处于 CLOSE_WAIT 状态

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

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

我能够将问题追溯到数百个处于 CLOSE_WAIT 状态的 http 端口请求,这些请求从未关闭(我等了几个小时,它们仍然没有变化)。

有什么想法吗?

答案1

您的 http.sys 版本是多少?您可能需要尝试以下更新:

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

您还应该确认 TCP KeepAliveTime 的值。默认情况下,该值设置为 2 小时。通常,最好将其降低,尤其是面向 Internet 的 Web 服务器。在许多情况下,5 分钟就足够了,尽管您可能希望将其设置为与会话状态超时相同(默认为 20 分钟),这样您的 Web 开发人员就不会讨厌您。要将该值设置为 20 分钟,请使用十六进制 dword 值 0x00124F80:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]  
"KeepAliveTime"=dword:00124F80  

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

另一个可能的嫌疑人是 Windows 的高级 TCP/IP 功能。这些功能可能会引入难以诊断的微妙问题,因此驱动程序必须非常可靠。由于大多数 HP 和 Dell 服务器都使用 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  

答案2

查看文章可以帮助您了解和解决问题。我还将检查服务器上的 NIC 驱动程序并将其更新为最新版本。

相关内容