jmap/jhatについて

Javaでメモリリークを調査するため、hprofを利用してメモリプロファイルを行うことがある。

hprofはJVMの起動オプションを指定してプロファイルをとる代物であるが、若干もさっとするし、何よりよく落ちる・・・Tomcatを起動していたらTomcatもろとも道連れになり実用に耐えません・・・

HPROF ERROR: Cannot allocate malloc memory [hprof_util.c:160]
HPROF TERMINATED PROCESS

これでは使い物にならんと思って調べていたら、jmapというツールが存在することを発見。jmapはJVMのPIDを指定することでヒープデータを取得することが可能なツール。これを使えば↑の用にhprofが落ちて困ることは回避可能となる。jmapはJDKに付属している(JREには付属していない)。以下使い方。

# jmap -dump:format=b,file=<ダンプファイル> <pid>

heapダンプを取得後は、jhatで解析。jhatについては「Java SE 6完全攻略」 第5回 プロファイラ hprofとよき相棒 jhatの説明が詳しいので割愛するが、heapダンプサイズが大きい場合、java.lang.OutOfMemoryError: Java heap spaceが出ます。。heapサイズを調整して起動すればいいんですけどね。

# jhat -J-Xmx1024m <ダンプファイル>

なれてくるとJavaって便利ですね。

This entry was posted in Java. Bookmark the permalink.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">