Tomcatが提供するJava/JSP Webアプリケーションを使用して、Webサービスを呼び出してパートナーWebサービスからデータを取得します。パートナーサービスで使用される技術は不明です。パートナーのWebサービスが、それはしてSocketTimeoutExceptionを返し頻繁に長時間の停電があります。パートナーのWebサービスが簡単に停止している場合複数の依存java.net.SocketTimeoutExceptionsからTomcat Java Serverアプリケーションが復旧しない
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サービスに1時間以上の長時間の停止があり、タイムアウトしたサービスへの呼び出しが数百件あった場合、アプリケーションは回復しない状態になります。パートナーサービスが戻ってきますが、そのサービスへのアプリケーション呼び出しでも、まったく同じSocketTimeoutExceptionエラーが発生します。
その時点でTomcatを起動して停止すると、すべて正常に動作します。
私はhttpキープアライブを使用していません。私のコードは、例外が発生するかどうかにかかわらず、すべてのオブジェクトインスタンスをクリーンアップすることについての肛門です。これ以上使用することができるがあるまでは、離れエラーで1を投げ、いくつかのリソース(ソケット?)「まで使用して」されたTomcatのJavaプロセスのように思えるん。誰もこれを以前見たことがありますか?解決策は明らかですか?私はこの問題について多くの調査をしており、同じ問題を抱えている人は見つけられませんでした。
ありがとうございます! John
システムがこの揺れた状態になると、スタックダンプまたはヒープダンプを実行しましたか?これらは潜在的に様々な資源枯渇問題を指摘する可能性がある。さらに、tomcatをバウンスする前に、開いているソケットをコンピュータにリストする必要があります。 – jtahlborn
netstat -anoは実際にTIME_WAIT状態になっているTCPソケットの多くを示しています。これらのほとんどのPIDは0で、これはシステムアイドルプロセスです。どういう意味ですか? – Squidious