プロセスがクラッシュしてコア ダンプが残る場合、またはコア ダンプを作成したgcore
場合、どうすれば分析できますか?
jmap
、などを使用してjstack
、jstat
すべての変数の値を確認できるようにしたいと考えています。
このようにして、JVM がクラッシュまたはフリーズした理由を見つけることができます。
gcore または gdb でコア ダンプを作成した場合は、それをHPROFファイルと呼ばれるものに変換する必要があります。これらは、VisualVM、Netbeans、または Eclipse のメモリ アナライザー ツール (以前の SAP メモリ アナライザー) で使用できます。Eclipse MAT をお勧めします。
ファイルを変換するには、コマンドライン ツールjmapを使用します。
# jmap -dump:format=b,file=dump.hprof /usr/bin/java core.1234
どこ:
dump.hprofは、作成する hprof ファイルの名前です。
/usr/bin/java は、コア ダンプを生成した Java バイナリのバージョンへのパスです。
core.1234 は通常のコア ファイルです。
VisualVM が役立つかもしれません (自分で試す機会はまだありません)。リンク:
http://java.sun.com/javase/6/docs/technotes/guides/visualvm/coredumps.html
ここで必要なのはコア ダンプでよろしいですか? これには、Java レベルの情報ではなく、実行中の JVM の生の中身が含まれます。おそらく、JVM ヒープ ダンプの方が必要です。
http://www.oracle.com/technetwork/java/javase/tsg-vm-149989.pdfを参照してください。コア ファイルで直接「jdb」を使用できます。
実際、VisualVM はアプリケーションのコア ダンプを処理できます。
「File/Add VM Coredump」を呼び出すだけで、アプリケーション エクスプローラーに新しいアプリケーションが追加されます。その後、その JVM のスレッド ダンプまたはヒープ ダンプを取得できます。
lady4jスタックアナライザーを試してみてください。
jhat は、私がこれまでに使用した中で最高のものの 1 つです。コア ダンプを取得するには、gcore の代わりに jmap と jps を使用することをお勧めします (私は使用していません)。リンクをチェックして、jhat の使用方法を確認してください。 http://www.lshift.net/blog/2006/03/08/java-memory-profiling-with-jmap-and-jhat
Netbeans Profilerを試すことをお勧めします。これには、リアルタイム分析用の豊富なツール セットがあります。IbM のツールは、オフライン分析に試す価値があります
IBM は、sun jvm でも使用できる多くのツールを提供しています。alphaworks のいくつかのプロジェクトを見てみましょう。それらはヒープおよびスレッド ダンプ アナライザーを提供します。
カール