VisualVMを使う
<jdkのインストールディレクトリ>/bin/jvisualvm
基本的にはこれでOK
ただし、AmazonLinux等を使っていてCUIのみの環境の場合、その場で使えない。
その場合は以下
GCを起こす
$JAVA_HOME/bin/jcmd <プロセスID> GC.run
Heapdumpを取得する
Java仮想マシーン(jvm)のメモリ上の内容を取得する。複数回取得します。
$JAVA_HOME/bin/jmap -dump:format=b,file=HogeHeapDmp <プロセスID>
バイナリ形式で HogeHeapDmpという名前のファイルが作成される
jvmのプロセス IDの調べ方
$JAVA_HOME/bin/jps -l
Threaddumpを取得する
$JAVA_HOME/bin/jstack <プロセスID> > HogeThreadDmp
HogeThreadDmpという名前のファイルが作成される。複数回取得します。
後は・・・
各ファイルをローカルに持ってきてvisualvmで「ファイル」->「読み込み」で読み込めます
Heapdmpは「別のヒープダンプと比較」で増加しているインスタンスを調べる事が出来ます。
Threaddmpはずっと動いてたり(Runnable)、ロックの開放待ち状態のまま(waiting for monitor entry)
想定外のスレッドが無いか確認します。