コンテンツにスキップ

samply - Firefox Profiler UI 付きサンプリングプロファイラー チートシート

samply - Firefox Profiler UI 付きサンプリングプロファイラー チートシート

samply はクロスプラットフォーム コマンドラインの サンプリングプロファイラー macOS, Linux, Windows 用。コマンドまたは実行中プロセスのスタックトレースをサンプル (デフォルト ~1000 Hz) してから、結果を Firefox Profiler ウェブ UI にサーブ — 成熟した、インタラクティブなフロントエンド フレームグラフ、スタックチャート、コール木、スレッドタイムライン付き。ネイティブコード (C/C++/Rust/Go) とその他の標準スタック情報を出力する言語をプロファイル、コード変更不要。

インストール

方法コマンド
Cargocargo install --locked samply
バイナリGitHub Releases ページからダウンロード
Linux perf イベント アクセスsysctl kernel.perf_event_paranoid=1 (またはより低い) が必要な場合あり
確認samply --version

基本的な使用法

コマンド説明
samply record ./my-program argsコマンドをプロファイル、その後 UI を開く
samply record -- cargo run --release-- 後プロファイル (フラグを通す)
samply record --pid 1234既に実行中プロセスをプロファイル
samply load profile.json.gzUI で保存プロファイルを再度開く
samply --help完全オプションリスト

記録オプション

オプション説明
-r, --rate NHz でのサンプリングレート (デフォルト ~1000)
-o, --output FILEプロファイルをファイルに保存
--save-onlyUI 起動なしで記録
-p, --pid PID実行中プロセスにアタッチ
-d, --duration SECS固定期間でプロファイル
--reuse-threadsいくつかのワークロード向けスレッド処理調整
--その後のすべてはコマンド + その引数

Firefox Profiler UI

記録後、samply はローカル Firefox Profiler ビューを開く。キーパネル:

パネル表示
フレームグラフ集約スタック (時刻が費やされる場所)
スタックチャートX 軸上の時刻、垂直に積層されたスタック
コール木トップダウン / ボトムアップ 階層と自己/全体時刻
マーカーチャート時刻を超えたイベント (存在する場合)
タイムラインスレッドごと活動; 範囲選択して焦点化
UI アクション使用
時刻範囲を選択分析を実行の一部に焦点化
コール スタック反転ホット リーフ関数 (自己時刻) を検索
検索関数名でコール木をフィルター
共有/エクスポートプロファイル保存またはアップロード

ワークフロー ヒント

目標アプローチ
CPU ホット パスを見つける記録、フレームグラフを開く、広いフレームを探す
特定の遅い段階を見つけるタイムラインでその時刻範囲を選択焦点化
ビルドを比較プロファイルを保存して並行して読み込む
ノイズを削減デバッグ情報 (debug = true) 付きリリースビルドをプロファイル

一般的なワークフロー

# Rust リリース ビルドをプロファイル (シンボル付きデバッグ情報保持)
samply record -- cargo run --release

# ランニング サーバーを 20 秒間プロファイル
samply record --pid $(pgrep -n myserver) -d 20

# CI でヘッドレスに記録、アーティファクトを後に検査
samply record --save-only -o prof.json.gz ./bench
samply load prof.json.gz

samply vs その他のプロファイラー

アスペクトsamplyperf + FlameGraphhotspot
プラットフォームmacOS/Linux/WindowsLinuxLinux
UIFirefox Profiler (リッチ)静的 SVGQt GUI
セットアップ単一バイナリ複数ツールGUI インストール
最適な用途クロスプラットフォーム、インタラクティブスクリプト化 Linux プロファイリングQt/perf GUI ユーザー

リソース