java 對CLOSE_WAIT狀態中的連接進行故障排除





3 Answers

CLOSE_WAIT是遠程主機發送FIN(關閉它的連接)時本地TCP狀態機所處的狀態,但本地應用程序沒有完成相同的操作並發送了回复FIN。 雖然客戶端無法接收數據,但本地機器仍然可以在此時發送數據(除非它僅在連接上關閉了一半)。

當遠程主機關閉(發送FIN)時,您的本地應用程序將獲得某種事件(它是基本C庫中套接字上的“讀取”事件)但是從該連接讀取將返回錯誤以指示連接已關閉。 此時,本地應用程序應關閉連接。

我對Java知之甚少,對WebLogic一無所知,但我認為應用程序可能沒有正確處理讀錯誤,因此從不關閉連接。

java sockets tcp weblogic netstat

我有一個在Windows上運行在WebLogic 11g上的Java應用程序,經過幾天后,它變得沒有響應。 我注意到的一個可疑症狀是,即使服務器處於空閒狀態,大量連接(大約3000個)也會顯示在netstat並具有CLOSE_WAIT狀態。 由於應用程序服務器正在管理客戶端連接,我不確定是什麼導致了這種情況。 我們還進行了許多環回到同一服務器的Web服務調用,但我相信這些連接會正常關閉。 還有什麼可能導致這種情況,以及如何解決這樣的問題?




問題是在webLogic中將“使用JSSE SSL”設置為true時觸發的錯誤。 使用WebLogic自己的SSL實現而不是JSSE對我們的應用程序來說不是問題,因此我只是取消選中該設置並且問題消失了。




這可能意味著您沒有通過accept()調用在套接字上調用“close”。




Related