heaptrack - Linux ヒープメモリプロファイラー チートシート
heaptrack (KDE) は Linux 用 ヒープメモリプロファイラー。すべてのメモリアロケーションをトレースし、各をスタックトレースで注釈するため、リーク、アロケーション ホットスポット、過剰一時アロケーション、ピークメモリ使用法を見つけられます。プログラム実行中にデータファイルを記録してから、heaptrack_gui (リッチフレームグラフとチャート) または heaptrack_print (コマンドライン) でアナライズ。オーバーヘッドは現実的なワークロード用に低い。
インストール
| プラットフォーム | コマンド |
|---|
| Debian/Ubuntu | sudo apt install heaptrack heaptrack-gui |
| Fedora | sudo dnf install heaptrack heaptrack-gui |
| Arch Linux | sudo pacman -S heaptrack heaptrack-qt |
| ソースから | KDE/heaptrack リポから構築 (CMake) |
| 確認 | heaptrack --version |
記録
| コマンド | 説明 |
|---|
heaptrack ./my-program args | 開始からコマンドをプロファイル |
heaptrack -p PID | 実行中プロセスにアタッチ (GDB ベース) |
heaptrack -o out.zst ./prog | 特定出力ファイルに書き込み |
| 出力 | カレントディレクトリで heaptrack.PROG.PID.zst を作成 |
終了時、heaptrack はサマリーと記録データファイルへのパスをプリント。
分析 (GUI)
heaptrack_gui heaptrack.my-program.12345.zst
| GUI ビュー | 表示 |
|---|
| サマリー | ピーク RSS、全アロケーション、リークバイト |
| フレームグラフ | コール スタックに属するアロケーション |
| トップダウン / ボトムアップ | アロケーション別コール木 |
| 呼び出し元/被呼び出し者 | アロケーション リレーション内で記号ナビゲート |
| チャート | 時刻を超えたアロケーション/リーク/一時的 |
分析 (CLI)
# トップアロケーション ホットスポットをターミナルにプリント
heaptrack_print heaptrack.my-program.12345.zst | less
| メトリック | 意味 |
|---|
| peak | 最大ヒープメモリ一度に保管 |
| leaked | アロケートされたが決して解放されないメモリ |
| allocations | アロケーション総数 (チャーン) |
| temporary | ほぼ即座に解放されたアロケーション (ウェイスト) |
| オプション | 説明 |
|---|
-a, --print-peak | ピークメモリコンシューマーでソート |
-l, --print-leaks | リークを表示 |
-t, --print-temporary | 一時的アロケーション ホットスポットを表示 |
-d, --diff FILE | 2 つの記録を diff |
実行を比較 (Diff)
# ビルド/実行間で変わったことを見る
heaptrack_print -d before.zst after.zst
各メトリックが伝える内容
| 症状 | 確認先 |
|---|
| プロセス RSS は増加し続ける | leaked — アロケーション決して解放 |
| 高アロケーター CPU コスト | allocations / temporary — チャーン多い |
| 負荷下で OOM | peak — 最大同時メモリ削減 |
| スタートアップメモリ スパイク | 関連時刻範囲でフレームグラフ |
一般的なワークフロー
# サービスのリークを見つける
heaptrack ./myservice --run-workload
heaptrack_print -l heaptrack.myservice.*.zst | head -30
# 重い操作中のピークメモリを属性化 (GUI が最も簡単)
heaptrack ./batch-job
heaptrack_gui heaptrack.batch-job.*.zst # 「peak」フレームグラフを検査
# ホットループ内での一時的アロケーション チャーン削減
heaptrack_print -t heaptrack.*.zst | head
heaptrack vs その他のメモリツール
| アスペクト | heaptrack | Valgrind (massif/memcheck) | 組み込みアロケーター |
|---|
| オーバーヘッド | 低い | 高い (memcheck 非常に高い) | 様々 |
| リーク検出 | あり | あり (memcheck) | 部分的 |
| アロケーション チャーン | あり (一時的) | massif はピークにフォーカス | いいえ |
| UI | リッチ GUI + CLI | テキスト / massif-visualizer | なし |
| 最適な用途 | 現実的実行でのファスト ヒープ プロファイリング | 深い正確性チェック | クイックチェック |
リソース