半分の時間でハングアップし、残りの半分で JVM がクラッシュする Java アプリケーションがあります。何が起こっているのかを確認するために使用できるツールはありますか? CentOS 5.6 を使用しています
3 に答える
手始めに、JVisualVMをお勧めします。JDK が付属しているためjvisualvm
、コマンド ラインに入力するだけで開始できます。
起動すると、実行中の JVM に接続できるため、ハングした Java プロセスに接続して、実行中のすべてのスレッドとヒープの内容のスタック ダンプを検査できるはずです。
その他の便利な組み込みツールには、次のものがあります。
jps
実行中の Java プロセスのプロセス ID を一覧表示します
jstack
指定された JVM プロセスの各スレッドのスタック ダンプを出力します
jmap
指定された JVM プロセスのヒープ ダンプを生成します (jvisualvm はヒープ ダンプも生成できます)。
jhat
jmap または jvisualvm で生成されたヒープ ダンプを分析します
もちろん、より洗練されたプロファイラも利用できます。JProfilerは非常に高く評価されています。
2 つの異なるケースがあります。
アプリケーションのクラッシュ: OOM でしたか? NPE? 例外は何でしたか?jvm クラッシュが発生した場合は、hs_err_.log ( http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf )が表示されます。
ファイルを見ると、独自の JNI がクラッシュまたは JVM バグを引き起こしているかどうかがわかります。
アプリケーションのハング:私は、visualvm または jstat から始めます (どちらも JDK の一部です)。スレッドの現在の状態を確認し、アプリケーション エラーがあるかどうかを確認できます。
内部プロセスを確認するのに役立つその他の Linux ツール:
Oracle ツールのドキュメントには、かなりきちんとしたリストが記載されています。また、オペレーティング システム固有のツールもリンクしています。
これらのケース (ハング、フリーズ、...) では、ヒープ ダンプを分析して、アプリケーションで何が起こっているかを把握する必要があります。JVisualVM を使用してダンプを取得するか、適切な JVM パラメータを追加して、クラッシュ時のヒープの内容。