「Java」 ヒープダンプの取得方法

Javaメモリリークの調査の際には、"ヒープダンプ" なるものを取得するらしい。

その取得方法について、ちょっと調べたのでメモ。

 

いくつか方法があるらしいので、順番に。

 

1. HPROF 

format オプションに "b" を指定して出力する ( こうすると後で jhat で見れる )。

java -agentlib:hprof=file=snapshot.hprof,format=b [クラスファイル名]

・HPROF: ヒープ/CPU プロファイリングツール

http://docs.oracle.com/javase/jp/7/technotes/samples/hprof.html

 

2. jconsole

jconsole 起動して、

[MBeanタブ]-[com.sun.management]-[HotSpotDiagnostic]-[操作]-[dumpHeap]

とすると、ヒープダンプを出力してくれる

 ・JConsole の使用 - Java SE 監視および管理ガイド

http://docs.oracle.com/javase/jp/7/technotes/guides/management/jconsole.html

 

3. jmap

プロセスID に関しては、jps とかで調べればいいかな。

jmap -dump:format=b,file=snapshot.jmap [プロセスID]

  ・jmap - メモリーマップ

http://docs.oracle.com/javase/jp/7/technotes/tools/share/jmap.html

 

4. -XX:+HeapDumpOnOutOfMemoryError

java コマンドにこのオプションを指定しておくと、OutOfMemoryError 発生時に

ヒープダンプを出力してくれるらしい。

 ・Command-Line Options - Troubleshooting Guide for HotSpot VM

http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/clopts.html

 

5. VisualVM

Java SE 6 Update 7 以降なら VisualVM でも取得できますね。

 ・VisualVM

http://docs.oracle.com/javase/jp/7/technotes/guides/visualvm/

Java VisualVM

http://docs.oracle.com/javase/jp/7/technotes/guides/visualvm/heapdump.html

 

上記で出力したヒープダンプは jhat なるツールで確認できるみたいです。

今日はもう眠いのでここまでです。適当になってしまいましたが以上。

 ・jhat - Java ヒープ解析ツール

http://docs.oracle.com/javase/jp/7/technotes/tools/share/jhat.html