LoginSignup
44
44

More than 5 years have passed since last update.

javaのメモリーリークを調査する

Last updated at Posted at 2014-12-30

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)
想定外のスレッドが無いか確認します。

44
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
44