Networking

如何診斷大量 TIME_WAIT 連接

  • April 5, 2013

我們只有一台伺服器存在生產問題,並且將性能緩慢與該TIME_WAIT州大量套接字相關聯。不用把這個問題拖入大背景,我們基本上知道每次伺服器慢的時候,伺服器的套接字大約有 80% 處於這種TIME_WAIT狀態,當然我們通過執行 a netstat) 可以看到。具體來說,因為TIME_WAIT超時並消失,當我們的伺服器很慢時,我們會看到這些TIME_WAITs 非常頻繁地出現(大約每 5 到 10 分鐘)。

我做了一點探勘,發現TIME_WAIT當伺服器關閉活動連接時會發生這種情況,但會保留它以防任何延遲的數據包通過。最終TIME_WAIT超時。

無論如何,要確切了解為什麼單個套接字會進入該TIME_WAIT狀態?這是 CentOS 5 - Linux 會在var/logs任何地方記錄此資訊,還是有任何方法可以進行 tcpdump 並尋找導致TIME_WAIT? 提前致謝。

簡短的回答 - 這是由於一個應用程序。該應用程序會在短時間內創建套接字,然後關閉它們,然後立即需要打開另一個套接字。遲緩與用完套接字的程序有關。

創建套接字時有一些選項 - SO_REUSEADDR 和 SO_REUSEPORT。它們的功能有些相似,但我懷疑在 Centos 5 中 SO_REUSEPORT 不可用。無論如何,套接字呼叫上的可選設置允許立即重用埠。

因此,一個常用的修復方法是重新編碼。它可能是一個網路應用程序,連接幾秒鐘然後結束會話。

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