64ビットLinux(CentOS)マシンで奇妙なTomcat(_7.0.21
_)やJVMエラーを診断しようとしています。
サーバーアプリケーションの負荷テストを行っており、100Kメッセージでヒットしてみました。 jvisualvm
を起動し、ヒープをずっと監視していました。約93Kの処理済みメッセージに到達し、Tomcatが停止するまで、すべてが素晴らしく見えました*(以下を参照)。 TomcatのPID番号でps
を実行して、死んでいることを確認しました。
このクラッシュまで:
MAX_HEAP
_に増加しましたサーバーコードのどこにもSystem.exit()
の呼び出しはありません-そのため、それをすぐに除外することができます(そして、はい、私は再確認しました!!!)。
これがTomcatのクラッシュなのかJVMなのかわかりません(どうすればわかりますか?)。そして、私が知っていたとしても、何が悪かったのかを示すものを見つけることができないようです。
catalina.out
_と尊重_localhost_access_*
_ファイルは情報なしで停止しますTomcatがコアダンプをログに記録することは可能であると聞きましたが、その方法がわからず、オンラインの例はあまり役に立ちません。
SOこれを診断するにはどうすればよいですか?考えられるすべての要因を除外し始めるには、どのような手順を実行する必要がありますか?
前もって感謝します!
申し訳ありませんが、@ ericksonから緑色のチェックを削除する必要がありました。私はついにTomcatを殺しているものを理解しました。
プロファイラープラグインがVisualVMで正しく構成されておらず、Tomcatプロセスでプロファイルを実行しようとするとそれが強制終了されたようです。
理由を今すぐ調査し、詳細がわかり次第、この回答を更新します。
JVMがクラッシュした場合は、hs_err_pidNNN.logファイルが必要です。これを有効にするために何もする必要はありません。その場所は、OSとTomcatの実行方法によって異なります。 Windowsでは、サービスとして実行していない限り、デスクトップに表示される可能性があります。それ以外の場合は、クラッシュしたプロセスの現在の作業ディレクトリにあるはずです。
ご使用のオペレーティングシステムは、おそらくプロセス監視用の追加ツールを提供します。環境について詳しく説明するか、 serverfault.com で質問することができます。
jvisualvm
が実際にクラッシュを引き起こしている可能性もあります。
問題を再現し、シナリオを徐々に単純化して原因を特定できるようにします。
もう1つの可能性は、OSのメモリが不足していて、 OOM Killer がプロセスを強制終了していることです。この場合、JVMはヒープダンプまたはhs_err_pidファイルを書き込む機会を取得しません。
オプションJava -XX:+ HeapDumpOnOutOfMemoryErrorを使用して、メモリ不足エラーによるjvmクラッシュのヒープダンプを作成できます。