-Xdumpオプションで確認できるDump出力先を変更する

JVM(IBMJava)が異常終了で落ちる時にダンプが出力されるが,デフォルトだと実行ユーザのホームディレクトリに出力されるらしく,ホームディレクトリのファイルシステムが小さかったりすると,せっかく吐かれたダンプが途中で切れてしまうというかなり残念な状態になる.

  • Java Dump (javacore.txt)
  • Heap Dump (heapdump.phd)
  • System Dump (core.dmp)
  • Snap Dump (Snap.trc)

-Xdump設定確認

現在の設定は実行ユーザで "java -Xdump:what" を投げれば確認できる.以下は出力結果を抜粋したもので,こんな感じに出力される.

Registered dump agents

                                          • -

dumpFn=doSystemDump
label=C:\sdk\jre\bin\core.%Y%m%d.%H%M%S.%pid.dmp

                                          • -

dumpFn=doSnapDump
label=C:\sdk\jre\bin\Snap%seq.%Y%m%d.%H%M%S.%pid.trc

                                          • -

dumpFn=doHeapDump
label=C:\sdk\jre\bin\heapdump.%Y%m%d.%H%M%S.%pid.phd

                                          • -

dumpFn=doJavaDump
label=C:\sdk\jre\bin\javacore.%Y%m%d.%H%M%S.%pid.txt

                                          • -
IBM MustGather: Using the -Xdump Option - United States

"-Xdump::defaults" というコマンドがあるのでこれでデフォルト定義を変えられると思いきや,あくまでこれは定義を確認するだけのコマンドで,実際に解説を見ても実行時に設定されると書いてある.

You can change these defaults at runtime. For example, you can direct Java dump files into a separate directory for each process, and guarantee unique files by adding a sequence number to the file name using:

IBM MustGather: Using the -Xdump Option - United States

-Xdump設定変更

デフォルト定義を変更するには,実行ユーザの.profileなどで以下の環境変数を定義しておく必要がある.全部で3種類あるので基本的には合わせて設定しておくのが良さそう.

IBM_JAVACOREDIR : Javaダンプ出力先
IBM_HEAPDUMPDIR : Heapダンプ出力先
IBM_COREDIR : Systemダンプ、snap出力先

WAS虎の巻(運用管理編): 第3回「障害時運用」

JavaエンジニアならJavaCore/HeapDumpに慣れておく

SI現場でJavaCore/HeapDumpを解析する場面と言えば,主に障害時やパフォーマンス改善の問題判別だったりするので,詳細な解析は後回しにしつつも,ザッと全体に目を通してなんとなくこんな感じだなってすぐ把握できるとJavaエンジニアとして強いと思う.JavaCoreであればjavacore読み方あたりを参考にテキストエディタで読んでみたり,HeapDumpであればツールを使って巨大なオブジェクトを探してみたり.自分自身もまだまだ勉強不足だなと痛感…!