HPROF ファイル形式とは?
拡張子 .hprof を持つファイルは、Java Virtual Machine (JVM) 上で実行されているプログラムの ヒープメモリダンプ を保持します。.hprof ファイルは、JDK に組み込まれた HPROF プロファイリングエージェントによって生成されます。形式はバイナリで、キャプチャ時の JVM ヒープサイズに比例して、数 GB に達する ほど非常に大きくなることがあります。診断用のアーティファクトであるため、.hprof ファイルはアプリケーションのパフォーマンスに影響を与えることなく安全に削除できます。
.hprof ファイルの生成。 .hprof ファイルは通常、Java のメモリ・エラー中に生成されます。最も一般的なトリガーは OutOfMemoryError です。JVM フラグ -XX:+HeapDumpOnOutOfMemoryError を追加すると、障害発生時にランタイムが自動的にダンプを書き出します。ダンプは、jmap -dump:format=b,file=heap.hprof <pid> または jcmd <pid> GC.heap_dump を使用してオンデマンドで作成することもできます。また、JVM が突然終了したときにメモリダンプファイルが自動的に作成される場合もあります。Android デバイスも .hprof ファイルを生成しますが、内部形式がわずかに異なるため、標準の Java ツールで読み取る前に hprof-conv で変換する必要があります。
.hprof ファイルの分析 - アプリケーションのメモリ問題。 .hprof ファイルは、Eclipse Foundation がホストするオープンソースの GUI アプリケーションである Eclipse Memory Analyzer Tool (MAT) で分析できます。MAT は .hprof ファイルをインポートして OOM (Out of Memory) エラーを分析し、メモリリークを特定し、アプリケーションのメモリ使用量の最適化を支援します。JDK に同梱されている VisualVM も、広く使用されているアナライザーです。本番レベルのプロファイリングでは、JDK 11 以降は JFR (Java Flight Recorder) が推奨されるアプローチとなっていますが、メモリリーク分析においては HPROF ヒープダンプが依然として標準的なツールです。
セキュリティと安全性
リスク: MEDIUMHPROF ファイルには、ダンプ時に JVM ヒープメモリ内にあったパスワード、秘密鍵、API トークン、個人情報などの機密データが含まれる可能性があります。ヒープダンプは機密情報として扱い、内容を確認または匿名化せずに本番環境のダンプをオンライン分析サービスにアップロードしないでください。ファイルは実行可能ではなく、コード実行のリスクはありません。
形式の詳細
概要- Android ART Heap Dump - Android Runtime は、互換性はあるが同一ではない形式の .hprof ファイルを生成します。MAT/VisualVM で開く前に hprof-conv (Android SDK) で変換してください。
HPROF ファイルを開くプログラム
技術的詳細
詳細仕様| エンコーディング | バイナリ(主要)、レガシーな ASCII テキストオプションもサポート |
| バイト順序 | ビッグエンディアン |
| コンテナ | シーケンシャル HPROF バイナリレコード形式 |
| マジック文字列 | «JAVA PROFILE 1.0.1» または «JAVA PROFILE 1.0.2» (オフセット 0 で null 終端) |
| 形式バージョン 1.0.1 | JDK 1.2-5、最大 2 GB までのヒープをサポート |
| 形式バージョン 1.0.2 | JDK 6+、2 GB を超えるヒープ用に HEAP DUMP SEGMENT タグ (0x1C) を追加 |
| 一般的なファイルサイズ | 50 MB - 20 GB (ダンプ時の JVM ヒープに比例) |
| レコード構造 | 1 バイトのタグ + 4 バイトのタイムスタンプオフセット + 4 バイトのボディ長 + 可変長ボディ |
| 主要なタグ | HEAP DUMP (0x0C), HEAP DUMP SEGMENT (0x1C), UTF8 文字列, LOAD CLASS レコード |
| Android HPROF | .hprof 拡張子を使用するが形式がわずかに異なる。分析前に hprof-conv が必要 |
| 主なトリガー | -XX:+HeapDumpOnOutOfMemoryError JVM フラグ、またはオンデマンドでの jmap および jcmd |
| リリース日 | Java 1.2 (1998); binary format stabilised with JDK 1.6 |
| 最新バージョン | HPROF binary format 1.0.2 (JDK 6+) |
| 仕様書 | docs.oracle.com |
HPROF の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。HPROF ファイルについて最初の質問をしてみましょう。