Networking
如何診斷大量 TIME_WAIT 連接
我們只有一台伺服器存在生產問題,並且將性能緩慢與該
TIME_WAIT
州大量套接字相關聯。不用把這個問題拖入大背景,我們基本上知道每次伺服器慢的時候,伺服器的套接字大約有 80% 處於這種TIME_WAIT
狀態,當然我們通過執行 anetstat
) 可以看到。具體來說,因為TIME_WAIT
超時並消失,當我們的伺服器很慢時,我們會看到這些TIME_WAIT
s 非常頻繁地出現(大約每 5 到 10 分鐘)。我做了一點探勘,發現
TIME_WAIT
當伺服器關閉活動連接時會發生這種情況,但會保留它以防任何延遲的數據包通過。最終TIME_WAIT
超時。無論如何,要確切了解為什麼單個套接字會進入該
TIME_WAIT
狀態?這是 CentOS 5 - Linux 會在var/logs
任何地方記錄此資訊,還是有任何方法可以進行 tcpdump 並尋找導致TIME_WAIT
? 提前致謝。
簡短的回答 - 這是由於一個應用程序。該應用程序會在短時間內創建套接字,然後關閉它們,然後立即需要打開另一個套接字。遲緩與用完套接字的程序有關。
創建套接字時有一些選項 - SO_REUSEADDR 和 SO_REUSEPORT。它們的功能有些相似,但我懷疑在 Centos 5 中 SO_REUSEPORT 不可用。無論如何,套接字呼叫上的可選設置允許立即重用埠。
因此,一個常用的修復方法是重新編碼。它可能是一個網路應用程序,連接幾秒鐘然後結束會話。