「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