Bytehound - Linuxメモリー プロファイラー チートシート
Bytehoundはプログラムのすべての割り当てと割り当て解除をトラッキングするLinux用メモリー プロファイラーで、異常によいweb UIの結果を提示。リーク検出を超えて、時間割り当てチャーン、コール スタック割り当てグループ、およびインタラクティブ フィルター「1MBより大きい割り当てを表示、このモジュールから決して解放」を許可—。Rust ベース LD_PRELOAD経由任意ネイティブ プログラム(C、C++、Rust)で動作するツール。
インストール
| Method | How |
|---|
| Release | GitHub Releasesからbytehound + libbytehound.soダウンロード |
| From source | リポジトリでcargo build --release |
| Requirements | Linux x86-64;シンボル付きプログラム(-g) |
| Verify | ./bytehound --version |
プログラムのプロファイリング
# プロファイラーをプリロードおよびプログラムを実行
LD_PRELOAD=./libbytehound.so ./my-program
# memory-profiling_*.datを生成
| Variable | Purpose |
|---|
LD_PRELOAD=./libbytehound.so | アロケーター フック インジェクト |
MEMORY_PROFILER_OUTPUT | 出力ファイル パス |
MEMORY_PROFILER_LOG=warn | ログ レベル |
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONS | 短命割り当てノイズ削減 |
MEMORY_PROFILER_DISABLE_BY_DEFAULT | 一時停止開始、プログラム的 有効化 |
結果を表示
# キャプチャ データweb UIを開始
./bytehound server memory-profiling_*.dat
# → http://localhost:8080開く
| View | Shows |
|---|
| Graphs | メモリー使用時間(ライブ、リーク、割り当て) |
| Allocations | スタック、サイズ、生涯持つすべての割り当て |
| Flame graph | コール スタックに帰属する割り当てボリューム |
| Leaked | 決して解放割り当て |
| Filtering | インタラクティブ クエリー ビルダー |
フィルタリング言語
Bytehoundの強さは データをスライス:
| Filter | Finds |
|---|
| Only leaked | 終了時にアライブ割り当て |
| Size range | 例:> 1 MiB |
| Lifetime | 短命(チャーン)対 長命 |
| Backtrace contains | 特定関数/モジュールから割り当て |
| Time range | ウィンドウ中割り当て |
# 概念的:パーサー モジュールから1MB超えたリーク割り当て
leaked AND size > 1048576 AND backtrace contains "parser::"
何を探すか
| Symptom | Investigate |
|---|
| RSS grows without bound | 「Leaked」ビュー—決して解放割り当て |
| High CPU in the allocator | 一時的割り当てチャーン |
| Memory spike at a moment | スパイク周辺時間 範囲フィルター |
| One function dominates | 割り当てフレーム グラフ |
| Fragmentation | 多くの小さい長命割り当て |
分析をスクリプト
Bytehoundはオートメーション API および CLI公開:
| Command | Purpose |
|---|
bytehound server DATA | インタラクティブUI |
bytehound export-heaptrack DATA | heaptrack ツールに変換 |
| REST API | プログラム的割り当てクエリー |
| Scripting | データセット カスタム分析 |
オーバーヘッド削減
| Setting | Effect |
|---|
| Cull temporary allocations | より小さい出力、少ないノイズ |
| Disable by default + enable in code | 興味深いフェーズのみプロファイル |
| Shorter runs | データ ファイル高速成長 |
Bytehound対他のメモリー プロファイラー
| Aspect | Bytehound | heaptrack | Valgrind massif | jemalloc prof |
|---|
| Overhead | 低い | 低い | 非常に高い | 非常に低い |
| UI | 豊かなweb UI | Qt GUI | テキスト/ビジュアライザー | テキスト +ツーリング |
| Filtering | 優秀 | 良い | 制限 | 制限 |
| Setup | LD_PRELOAD | heaptrack ./prog | valgrind --tool=massif | アロケーター 設定 |
| Best for | インタラクティブ 探索 | 高速 ヒープ プロファイリング | ディープ 正確さ | 本番サンプリング |
Qt UIと同様低オーバーヘッド アプローチheaptrackと比較;両方は現実的ワークロード用Valgrindを打ちます。
リソース