私のWebアプリケーションは、Linux(CentOS)上で64ビットJava 6.0.23、Tomcat 6.0.29(Apache Portable Runtime 1.4.2)で動作しています。 TomcatのJAVA_OPTSには、長いガベージコレクションを防ぐのに役立つ-Xincgcが含まれています。TomcatでHTTPリクエストが失敗しました
アプリの負荷が高く断続的に障害が発生しているため、問題のトラブルシューティングをしたいと考えています。
症状は次のとおりです。非常に断続的に、HTTPクライアントはHTTPリクエストをWebアプリケーションに送信し、空の応答を返します。
アプリケーションはデータベースを使用しないため、JDBC接続では問題ありません。だから私はおそらくメモリ(おそらく長いガベージコレクション)、スレッドの不足、ファイル記述子の不足のいずれかであると考えています。
javamelodyを使用して、使用されているスレッドの数を表示しました。maxThreadsがスレッド不足にならないように設定されているようです。同様に、利用可能なファイル記述子の数は非常に多く設定されています。
アプリは大量のメモリを使用します。記憶のように思えるかもしれませんが、おそらくここでの犯人か、それとも私が見落としているかもしれないことがありますか?
私の主な混乱は、なぜガベージコレクションがHTTP要求が失敗する原因になるのかと思います。直感的に、私は長いガーベジコレクションによってHTTP要求に長い時間がかかることがあると推測しますが、長いガベージコレクションによってHTTP要求が失敗するとは思われません。
ジョンスキートのコメントに応じて追加情報...
クライアントは間違いタイムアウトされていません。空の応答はかなり速く起こります。失敗すると、データはなく、HTTPヘッダーもありません。
NIOコネクタを使用するようTomcatを設定しましたか? NIOコネクタにバグがあり、場合によっては空の応答が返される – nos
いいえ、NIOを使用していません。 –