IIS7 數百個連接在 CLOSE_WAIT
我的 IIS7 伺服器上有一個 .Net 應用程序,它工作正常,直到我不得不將它移動到另一台伺服器。
我將完全相同的程式碼移至新伺服器,我注意到幾個小時後網站停止響應遠端請求,但如果我對伺服器執行遠端桌面,它會響應對本地主機的請求。如果我停止網站和應用程序池,它會再次開始正常工作。
我能夠將問題跟踪到數百個處於 CLOSE_WAIT 狀態的請求到從未關閉的 http 埠(我等了幾個小時,它們保持不變)。
有任何想法嗎?
您的 http.sys 版本是多少?您可能想嘗試以下更新:
如果通過負載平衡器連接到執行 Windows Vista、Windows 7、Windows Server 2008 或 Windows Server 2008 R2 的電腦,HTTP 連接會增加延遲
http://support.microsoft.com/kb/2634328
您還應該確認 TCP KeepAliveTime 的值。預設情況下,這設置為兩個小時。降低此值通常是個好主意,尤其是對於面向 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 功能。這些功能可能會引入微妙且難以診斷的問題,並且驅動程序必須堅如磐石。由於大多數惠普和戴爾伺服器都有博通晶片,而博通在這些功能方面以有缺陷的驅動程序而聞名,這是值得考慮的事情。我個人禁用了這些功能,除非我可以證明啟用它們會帶來可衡量的好處。以下是在提升的命令提示符下輸入的命令,這些命令將禁用這些功能:
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