samply - Firefox Profiler UI 付きサンプリングプロファイラー チートシート
samply はクロスプラットフォーム コマンドラインの サンプリングプロファイラー macOS, Linux, Windows 用。コマンドまたは実行中プロセスのスタックトレースをサンプル (デフォルト ~1000 Hz) してから、結果を Firefox Profiler ウェブ UI にサーブ — 成熟した、インタラクティブなフロントエンド フレームグラフ、スタックチャート、コール木、スレッドタイムライン付き。ネイティブコード (C/C++/Rust/Go) とその他の標準スタック情報を出力する言語をプロファイル、コード変更不要。
インストール
| 方法 | コマンド |
|---|
| Cargo | cargo 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.gz | UI で保存プロファイルを再度開く |
samply --help | 完全オプションリスト |
記録オプション
| オプション | 説明 |
|---|
-r, --rate N | Hz でのサンプリングレート (デフォルト ~1000) |
-o, --output FILE | プロファイルをファイルに保存 |
--save-only | UI 起動なしで記録 |
-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 その他のプロファイラー
| アスペクト | samply | perf + FlameGraph | hotspot |
|---|
| プラットフォーム | macOS/Linux/Windows | Linux | Linux |
| UI | Firefox Profiler (リッチ) | 静的 SVG | Qt GUI |
| セットアップ | 単一バイナリ | 複数ツール | GUI インストール |
| 最適な用途 | クロスプラットフォーム、インタラクティブ | スクリプト化 Linux プロファイリング | Qt/perf GUI ユーザー |
リソース