JProfiler ヘルプDownload

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>

は覚えにくく、最初にjps実行ファイルを使用してPIDを確認する必要があります。 JProfilerにはインタラクティブなコマンドライン実行ファイルbin/jpdumpが付属しており、 これが非常に便利です。プロセスを選択でき、Windowsでサービスとして実行されているプロセスに接続でき、 混在した32ビット/64ビットJVMでも問題なく、HPROFスナップショットファイルを自動的に番号付けします。 より多くの情報を得るには-helpオプションで実行してください。

プロファイリングエージェントをロードせずにHPROFヒープスナップショットを撮ることは、JProfiler GUIでもサポートされています。 プロセスにアタッチする際、ローカルでもリモートでも、常にHPROFヒープスナップショットを撮ることができます。

HPROFスナップショットにはスレッドダンプが含まれることがあります。HPROFスナップショットが OutOfMemoryErrorの結果として保存された場合、スレッドダンプはエラー発生時にアプリケーションのどの部分が アクティブであったかを伝えることができるかもしれません。エラーをトリガーしたスレッドは特別なアイコンでマークされています。