netstat 顯示不存在的程序的帶有 pid 的開放埠?

netstat 顯示不存在的程序的帶有 pid 的開放埠?

我們有一個程式可以監聽連接埠以接收有關運行報告的資訊。關閉並重新開啟程式後,我們收到一條錯誤訊息,指出它使用的連接埠已在使用中。查看netstat,我們看到該連接埠有 9 個實例處於 CLOSE_WAIT 狀態,1 個實例處於偵聽狀態。處於偵聽狀態的實例表示它的擁有者是 pid 488 taskkill。該應用程式是一個內部 .NET 應用程式。

這是生產環境,因此我們希望避免重新啟動機器。什麼可能導致此問題以及可以採取哪些措施來解決該問題?

答案1

CLOSE_WAIT 表示套接字已收到另一端的 FIN 封包,正在等待擁有該偵聽套接字的應用程式關閉。不在監聽套接字上呼叫 close() 可能會導致它浮動,就像它為您所做的那樣。

由於它是一個內部 .NET 應用程序,我會仔細檢查您的原始程式碼,以確保在退出之前正確關閉套接字。

有關套接字狀態的更多信息,包括 CLOSE_WAIT: http://blogs.technet.com/b/janelewis/archive/2010/03/09/explaining-close-wait.aspx

相關內容