jhatを使ってヒープダンプを解析するときの注意

今週はずっとメモリリークの調査をしていました。その時に使ったツールjhatにおいて注意する点があったのでメモしておきます。

今回はjmapコマンドで取得したヒープダンプをjhatで解析しました。jhatではヒープのヒストグラムを見てインスタンス数やインスタンスのフィールドの情報、スタックトレースを表示することができます。また、インスタンスの生成箇所を特定することも可能だということを聞いたので試したみたのですが、インスタンス情報にそのインスタンスが生成された場所はどこにも表示されていませんでした。

google先生に聞いてみたところ、

jmapコマンドでダンプした場合には、インスタンスの生成箇所は表示されません。ご注意ください。

どうりで表示されないわけです。javaプログラムをhprofエージェントを適用して実行することで、jhatでインスタンスの生成箇所を特定できるようになるみたいです。

今回のメモリリーク調査では、hprofエージェントを適用することがなかったのですが、このような注意が必要だったのです。

参考
Javaトラブルシューティング メールマガジン バックナンバー一覧