HPROFおよびPHDヒープスナップショット
HotSpot JVMとAndroid RuntimeはどちらもHPROF形式でのヒープスナップショットをサポートしており、 IBM J9 JVMはPHD形式でそのようなスナップショットを書き込みます。PHDファイルにはガベージコレクタのルートが含まれていないため、 JProfilerはクラスをルートとしてシミュレートします。クラスローダーのメモリリークをPHDファイルで見つけるのは難しいかもしれません。
ネイティブヒープスナップショットはプロファイリングエージェントなしで保存でき、JProfilerヒープスナップショットよりも低いオーバーヘッドを伴います。 これは、一般的なAPIの制約なしに保存されるためです。その反面、ネイティブヒープスナップショットはJProfilerヒープスナップショットよりも機能が少ないです。 例えば、割り当て記録情報は利用できないため、オブジェクトがどこに割り当てられたかを見ることができません。HPROFおよびPHDスナップショットは、 セッション→スナップショットを開くでJProfilerで開くことができ、JProfilerスナップショットを開くのと同じように操作します。 ヒープウォーカーのみが利用可能で、他のセクションはグレーアウトされます。
ライブセッションでは、プロファイリング→HPROF/PHDヒープスナップショットを保存を呼び出すことで
HPROF/PHDヒープスナップショットを作成して開くことができます。
オフラインプロファイリングの場合、「HPROFヒープダンプを作成する」トリガーアクションがあります。
これは通常、「メモリ不足例外」トリガーと共に使用され、OutOfMemoryError
がスローされたときにHPROFスナップショットを保存します。
これは VMパラメータ に対応しています。
-XX:+HeapDumpOnOutOfMemoryError
これはHotSpot JVMでサポートされています。
実行中のシステムからHPROFヒープダンプを抽出する別の方法は、JREの一部であるコマンドラインツール
を使用することです。その呼び出し構文
jmap
jmap -dump:live,format=b,file=<filename> <PID>
は覚えにくく、最初に実行ファイルを使用してPIDを確認する必要があります。
JProfilerにはインタラクティブなコマンドライン実行ファイル jps
が付属しており、
これが非常に便利です。プロセスを選択でき、Windowsでサービスとして実行されているプロセスに接続でき、
混在した32ビット/64ビットJVMでも問題なく、HPROFスナップショットファイルを自動的に番号付けします。
より多くの情報を得るには bin/jpdump
-help
オプションで実行してください。
プロファイリングエージェントをロードせずにHPROFヒープスナップショットを撮ることは、JProfiler GUIでもサポートされています。 プロセスにアタッチする際、ローカルでもリモートでも、常にHPROFヒープスナップショットを撮ることができます。
HPROFスナップショットにはスレッドダンプが含まれることがあります。HPROFスナップショットが
OutOfMemoryError
の結果として保存された場合、スレッドダンプはエラー発生時にアプリケーションのどの部分が
アクティブであったかを伝えることができるかもしれません。エラーをトリガーしたスレッドは特別なアイコンでマークされています。