Windows-Server-2008

IIS7 數百個連接在 CLOSE_WAIT

  • April 9, 2021

我的 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  

引用自:https://serverfault.com/questions/200703