我有一個Java/JSP的Web應用程序提供了被Tomcat,使Web服務調用了一個合作伙伴網絡服務來獲取數據。合作伙伴服務中使用的技術是未知的。該合作伙伴網絡服務具有經常停電延長它返回一個SocketTimeoutException:的Tomcat Java服務器應用程序不恢復從多個從屬java.net.SocketTimeoutExceptions
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
如果合作伙伴的Web服務有一個短暫的中斷,然後迅速地恢復,我的應用程序很好地處理一切。
如果合作伙伴網絡服務的延期中斷時間超過一個小時,並且我的應用程序有數百個服務調用已經超時,那麼在某些時候我的應用程序會達到不能恢復的狀態。合作伙伴服務回來,但我的應用程序調用該服務仍導致相同的確切SocketTimeoutException錯誤。
如果我開始在這一點停止Tomcat,然後一切工作正常後。
我不使用保持HTTP連接。我的代碼是關於清理所有對象實例的分析,無論是否發生異常。看起來Tomcat的Java過程似乎「用盡了」一些資源(套接字?),拋棄了每個錯誤,直到沒有更多可用的東西。有沒有人見過這個,並有解決方案明顯?我在這件事上做了很多搜索,沒有發現任何人有同樣的問題。
在此先感謝! 約翰
當你的系統進入該楔形狀態,你做了一個堆棧轉儲或堆轉儲?這些可能會指向各種資源耗盡問題。此外,您應該在反彈tomcat之前列出計算機上的開放套接字。 – jtahlborn 2012-02-11 20:43:02
netstat -ano確實在TIME_WAIT狀態中顯示了很多TCP套接字。大多數PID的PID是0,這是系統空閒過程。那是什麼意思? – Squidious 2012-02-14 18:58:33