コンテンツにスキップ

Bytehound - Linuxメモリー プロファイラー チートシート

Bytehound - Linuxメモリー プロファイラー チートシート

Bytehoundはプログラムのすべての割り当てと割り当て解除をトラッキングするLinux用メモリー プロファイラーで、異常によいweb UIの結果を提示。リーク検出を超えて、時間割り当てチャーン、コール スタック割り当てグループ、およびインタラクティブ フィルター「1MBより大きい割り当てを表示、このモジュールから決して解放」を許可—。Rust ベース LD_PRELOAD経由任意ネイティブ プログラム(C、C++、Rust)で動作するツール。

インストール

MethodHow
ReleaseGitHub Releasesからbytehound + libbytehound.soダウンロード
From sourceリポジトリでcargo build --release
RequirementsLinux x86-64;シンボル付きプログラム(-g
Verify./bytehound --version

プログラムのプロファイリング

# プロファイラーをプリロードおよびプログラムを実行
LD_PRELOAD=./libbytehound.so ./my-program

# memory-profiling_*.datを生成
VariablePurpose
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開く
ViewShows
Graphsメモリー使用時間(ライブ、リーク、割り当て)
Allocationsスタック、サイズ、生涯持つすべての割り当て
Flame graphコール スタックに帰属する割り当てボリューム
Leaked決して解放割り当て
Filteringインタラクティブ クエリー ビルダー

フィルタリング言語

Bytehoundの強さは データをスライス:

FilterFinds
Only leaked終了時にアライブ割り当て
Size range例:> 1 MiB
Lifetime短命(チャーン)対 長命
Backtrace contains特定関数/モジュールから割り当て
Time rangeウィンドウ中割り当て
# 概念的:パーサー モジュールから1MB超えたリーク割り当て
leaked AND size > 1048576 AND backtrace contains "parser::"

何を探すか

SymptomInvestigate
RSS grows without bound「Leaked」ビュー—決して解放割り当て
High CPU in the allocator一時的割り当てチャーン
Memory spike at a momentスパイク周辺時間 範囲フィルター
One function dominates割り当てフレーム グラフ
Fragmentation多くの小さい長命割り当て

分析をスクリプト

Bytehoundはオートメーション API および CLI公開:

CommandPurpose
bytehound server DATAインタラクティブUI
bytehound export-heaptrack DATAheaptrack ツールに変換
REST APIプログラム的割り当てクエリー
Scriptingデータセット カスタム分析

オーバーヘッド削減

SettingEffect
Cull temporary allocationsより小さい出力、少ないノイズ
Disable by default + enable in code興味深いフェーズのみプロファイル
Shorter runsデータ ファイル高速成長

Bytehound対他のメモリー プロファイラー

AspectBytehoundheaptrackValgrind massifjemalloc prof
Overhead低い低い非常に高い非常に低い
UI豊かなweb UIQt GUIテキスト/ビジュアライザーテキスト +ツーリング
Filtering優秀良い制限制限
SetupLD_PRELOADheaptrack ./progvalgrind --tool=massifアロケーター 設定
Best forインタラクティブ 探索高速 ヒープ プロファイリングディープ 正確さ本番サンプリング

Qt UIと同様低オーバーヘッド アプローチheaptrackと比較;両方は現実的ワークロード用Valgrindを打ちます。

リソース