最終更新日 2025年1月31日
perfコマンドの全オプション一覧を確認したい人は↓からジャンプしてください!
perf
コマンドの基本
perf
(Performance Counters for Linux)は、Linuxカーネルに組み込まれているパフォーマンス解析ツールです。主に以下のような用途に使われます。
- システム全体または特定のプロセスのCPU使用率を測定
- プロセスの関数呼び出し回数や実行時間を解析
- キャッシュミスや分岐予測ミスなどのハードウェア性能を測定
perf
の基本的な使い方
perfコマンドの基本的な使い方を紹介します。
perfコマンドの基本的な使い方は以下の記事でまとめているので良かったらみてみてください!
スポンサーリンク主要なサブコマンド一覧
perf
は複数のサブコマンドを持っていますが、よく使われるのは以下の3つです。
サブコマンド | 説明 |
---|---|
perf stat | システム全体や特定のプロセスの統計情報を取得 |
perf record | パフォーマンスデータを記録し、詳細なプロファイルを取得 |
perf report | 記録したデータを解析し、どの関数が時間を消費しているかを可視化 |
perf stat
の基本的な使い方
perf stat
は、CPU使用率やコンテキストスイッチなどの統計情報を取得するのに使われます。
CPU使用率を計測
perf stat -a -- sleep 5
このコマンドは、5秒間システム全体のCPU統計を収集します。
特定のプロセスのCPU使用率を測定したいときは?
-p <PID>
オプションを使うと、特定のプロセスの統計情報を取得できるよ。
perf stat -p 1234
どのメトリクスが重要なんですか?
基本的にはcycles
(CPUサイクル)、instructions
(命令数)、cache-misses
(キャッシュミス)が重要だね。特にinstructions per cycle (IPC)
の値が低いと、CPUが効率よく動作していない可能性があるよ。
perf record
の基本的な使い方
perf record
は、プロセスの詳細なプロファイルを取得するために使用されます。
プログラムのプロファイリング
perf record ./my_program
このコマンドは、my_program
の実行中にどの関数がどれだけの時間を消費しているかを記録します。
関数の呼び出し階層(コールグラフ)を記録するには?
-g
オプションを付けると、関数のコールグラフも取得できるよ。
perf record -g ./my_program
取得したデータをどうやって確認するんですか?
perf report
を使うと、記録したデータを解析できるよ。
perf report
perf
コマンドの主要オプション一覧と使い方
ここでは、perf
コマンドの主要なサブコマンドと、それぞれで使用できるオプションを詳しく解説します。perf
には多くの機能がありますが、基本的に 「データを取得するコマンド」 と 「取得したデータを分析するコマンド」 に分けられます。
- perf stat のオプション(システム全体の統計取得)
- perf record のオプション(プロファイリングデータを記録)
- perf report のオプション(記録データを解析)
- perf top のオプション(リアルタイムでパフォーマンス監視)
サブコマンド | 目的 | 主要オプション |
---|---|---|
perf stat | システム全体や特定のプロセスの統計情報を取得 | -e, -a, --interval-print |
perf record | パフォーマンスデータを記録し、詳細なプロファイルを取得 | -g, -F, -p |
perf report | 記録したデータを解析し、どの関数が時間を消費しているかを可視化 | --sort, --stdio |
perf top | リアルタイムで負荷の高い関数を監視 | -p, -e |
それでは、各サブコマンドの詳細と、実際の使い方を見ていきましょう。
スポンサーリンクperf stat
のオプション(システム全体の統計取得)
perf stat
は、CPU 使用率、命令数、コンテキストスイッチなどの統計情報を取得するためのコマンドです。システム全体の負荷や、特定のプロセスのパフォーマンスをざっくり把握するのに適しています。
オプション | 説明 |
---|---|
-e | 計測するイベントを指定(例: cycles, instructions) |
-a | システム全体の統計を収集 |
--interval-print | 指定した間隔で統計情報を表示 |
使用例 CPU 使用率を計測
perf stat -a -- sleep 5
このコマンドは、5秒間システム全体の統計情報を取得します。
よくある質問(Q&A)
特定のプロセスだけのCPU使用率を測定したいんですが?
-p <PID>
オプションを使うと、そのプロセスの統計情報だけを取得できるよ。
perf stat -p 1234
イベントって何を指定すればいいんですか?
基本的には cycles
(CPUサイクル)や instructions
(命令数)を見ておけばいいよ。他にも cache-misses
(キャッシュミス)や context-switches
(コンテキストスイッチ)も役立つね。
perfコマンドの出力結果の見方は以下の記事で紹介しているのでよかったら見てみてください!
スポンサーリンクperf record
のオプション(プロファイリングデータを記録)
perf record
は、プログラムの実行中にどの関数がどれだけの時間を消費しているかを記録するコマンドです。特定のプロセスの詳細なプロファイルを取得し、後で perf report
で分析できます。
オプション | 説明 |
---|---|
-g | コールグラフ(関数の呼び出し階層)を記録 |
-F | サンプリング頻度を指定(例: -F 99) |
-p | 特定のプロセスを対象に記録 |
使用例 特定のプロセスのパフォーマンスを分析
perf record -p 1234
このコマンドは、PID 1234 のプロセスのパフォーマンスデータを記録します。
よくある質問(Q&A)
関数の呼び出し階層(コールグラフ)も記録したいです。
-g
オプションを使うと、関数のコールグラフも取得できるよ。
perf record -g ./my_program
取得したデータをどうやって確認すればいいですか?
perf report
を使うと、記録したデータを分析できるよ。
perf report
perf report
のオプション(記録データを解析)
perf report
は、perf record
で取得したデータを解析し、どの関数が時間を消費しているのかを可視化するためのコマンドです。
オプション | 説明 |
---|---|
--sort | 表示順をカスタマイズ |
--stdio | テキストベースで結果を表示 |
使用例 記録したプロファイルデータを可視化
perf report --stdio
よくある質問(Q&A)
記録したデータの中で、特定の関数だけを見たいです。
--sort
オプションを使えば、特定の情報だけ表示できるよ。
perf report --sort=cycles
perf top
のオプション(リアルタイムでパフォーマンス監視)
perf top
は、リアルタイムで関数単位のCPU負荷を監視するためのコマンドです。
オプション | 説明 |
---|---|
-p | 特定のプロセスを監視 |
-e | 特定のイベントを指定 |
使用例 負荷の高い関数をリアルタイムで監視
perf top -p 1234
よくある質問(Q&A)
リアルタイムでCPU負荷を監視したいときは?
perf top
を使えば、現在のCPU使用状況を関数レベルで確認できるよ。
特定のイベント(例えばキャッシュミス)だけを監視できますか?
-e
オプションを使うと、特定のイベントに絞って監視できるよ。
perf top -e cache-misses
perfコマンドの出力結果の見方は以下の記事で紹介しているのでよかったら見てみてください!
スポンサーリンクperf
コマンドの各オプション毎の利用ケース
ここまで、perf
コマンドの基本的な使い方と主要なオプションを解説してきました。本章では、実際の開発・運用の現場で役立つperf
の応用的な使い方を紹介します。
以下のようなシナリオにおいて、perf
を活用することでボトルネックの特定や最適化が可能になります。
- CPU ボトルネックの特定 (
perf top
,perf record
) - メモリ使用状況の分析 (
perf mem
) - I/O パフォーマンスの測定 (
perf trace
)
CPU ボトルネックの特定
システム全体の CPU 使用率は高いが、どのプロセスや関数が負荷をかけているのか分からない場合、perf top
や perf record
を使って詳細に調査できます。
リアルタイムでCPU使用率の高い関数を特定
まず、perf top
を使って、負荷の高い関数をリアルタイムで確認します。
perf top
このコマンドを実行すると、CPUリソースを最も消費している関数が一覧表示されます。
特定のプロセスのCPU使用状況を記録
負荷が高いプロセスが特定できたら、perf record
で詳細なプロファイルを取得します。
perf record -p <PID>
perf report
このコマンドにより、プロセスのどの関数が時間を消費しているのかを詳細に分析できます。
よくある質問(Q&A)
システムが重いんですが、どのプロセスが原因か分かりません。
まずは top
や htop
を使って、CPUを大量に使っているプロセスの PID を確認しよう。それが分かったら perf top
で関数レベルの詳細を見てみるといい。
特定のプロセスだけ perf top
で監視できますか?
-p <PID>
オプションを使えば、特定のプロセスだけに絞って監視できるよ。
perf top -p 1234
関数ごとの実行時間を詳しく分析したいときは?
perf record -g
で関数の呼び出し階層(コールグラフ)を含めて記録すると、ボトルネックの原因がより明確になる。
perf record -g -p 1234
perf report
メモリ使用状況の分析
メモリ使用量が異常に増加する場合、perf mem
を使うことで、メモリアクセスの傾向を分析できます。
perf mem record
perf mem report
これにより、どの関数が頻繁にメモリアクセスを行っているのかを特定できます。
よくある質問(Q&A)
プログラムのメモリ使用量がどんどん増えていくんですが、perf
で原因を特定できますか?
perf mem
を使うと、どの関数がメモリアクセスを多く発生させているのかが分かるよ。
perf mem record
perf mem report
キャッシュミスの影響も調べたいです。
perf stat -e cache-misses
でキャッシュミスの発生回数を計測するといい。
perf stat -e cache-misses -p 1234
I/O パフォーマンスの測定
ディスク I/O やネットワーク I/O によるパフォーマンスの低下を調査するには、perf trace
を使用します。
perf trace -p <PID>
このコマンドを実行すると、プロセスが発行しているシステムコール(read
, write
, open
など)がリアルタイムで表示されます。
よくある質問(Q&A)
アプリのレスポンスが遅いんですが、ディスク I/O の影響を調べるにはどうしたらいいですか?
まず perf trace -p <PID>
で、そのプロセスがどのシステムコールをどれだけ呼んでいるかを確認してみよう。
perf trace -p 1234
特定の I/O 関連システムコールだけを監視できますか?
grep
でフィルタリングすれば特定のシステムコールだけを表示できる。
perf trace -p 1234 | grep read
I/O レイテンシが高い場合、どのオプションを使えばいいですか?
perf sched latency
を使うと、プロセスのスケジューリング遅延を調査できるよ。
perf sched latency
perf
の便利なオプションまとめ【チートシート】
ここまで、perf
コマンドの基本的な使い方や応用例を解説してきました。本章では、特に よく使うオプション を チートシート形式 でまとめます。
また、実際の分析で役立つ perf
コマンドの組み合わせ例 も紹介するので、必要に応じてコピーして活用してください。
以下は、perf
の主要なサブコマンドと、そのオプションを簡潔にまとめた一覧です。
基本的な perf
コマンド
コマンド | 説明 | 主要オプション |
---|---|---|
perf stat | システムやプロセスの統計情報を取得 | -e, -a, --interval-print |
perf record | 実行中のプロセスのプロファイルを取得 | -g, -F, -p |
perf report | 記録データを解析 | --sort, --stdio |
perf top | リアルタイムで負荷の高い関数を監視 | -p, -e |
perf mem | メモリアクセスの分析 | record, report |
perf trace | システムコールのトレース | -p, -e |
perf sched | スケジューリングの解析 | record, latency |
perf
の組み合わせ例
利用ケースに応じたperfコマンドの使用方法を5つ紹介します。
① CPU 使用率の統計を取得する
システム全体のCPU統計を10秒間測定します。
perf stat -a -- sleep 10
② 特定のプロセスのパフォーマンスを記録する
PID 1234 のプロセスをプロファイリングし、後でレポートを確認します。
perf record -p 1234
perf report
③ コールグラフ付きで関数の呼び出し関係を分析する
プログラム実行中の関数の呼び出し階層(コールグラフ)を記録して解析します。
perf record -g ./my_program
perf report
④ キャッシュミスを測定する
PID 1234 のプロセスのキャッシュミス回数を測定します。
perf stat -e cache-misses -p 1234
⑤ I/O システムコールをトレースする
PID 1234 のプロセスの read システムコールのみを監視します。
perf trace -p 1234 | grep read
よくある質問(Q&A)
どのオプションを使えばいいのか、毎回覚えられません…
まずは perf stat
, perf record
, perf report
の3つを覚えるといい。あとは、このチートシートを手元に置いておけば、必要なときにすぐ使えるよ。
perf
のコマンドをいちいち手打ちするのが面倒なんですが…
よく使うコマンドはエイリアスを作るといいよ。例えば perf stat
を簡単に呼び出せるようにするなら、
alias pstat=’perf stat -a — sleep 5′
こうしておけば、pstat で5秒間のCPU統計が取れるよ。
perf
で何を分析すればいいのか分からないときは?
まず perf top
を実行して、負荷の高い関数をリアルタイムで確認するといい。そこから perf record
や perf stat
を使って詳しく調査できる。
まとめ
本記事では、perf
コマンドの基本から応用まで詳しく解説しました。perf
は、Linux システムのパフォーマンスを分析し、CPU やメモリ、I/O のボトルネックを特定するために欠かせないツールです。
perf
コマンドの重要性
perf
は、アプリケーションやシステムのパフォーマンス問題を特定し、最適化するために役立ちます。特に以下のような場面で有効です。
- CPU 使用率が高いとき →
perf stat
やperf top
で負荷の原因を特定 - 特定のプロセスがボトルネックになっているとき →
perf record
でプロファイリング - メモリ使用量が増加しているとき →
perf mem
でメモリアクセスを解析 - I/O の遅延が発生しているとき →
perf trace
でシステムコールの動作を監視
このように、perf
を適切に活用すれば、システムのパフォーマンスを改善し、より効率的な運用が可能になります。
よくある質問(Q&A)
結局、perf
を使うと何が分かるんですか?
perf
を使えば、CPU やメモリ、I/O のどこにボトルネックがあるのかを特定できるよ。例えば、特定の関数が CPU を大量に消費しているとか、キャッシュミスが多くて処理が遅くなっているとかね。
アプリが重いとき、まずどのコマンドを試せばいいですか?
まず perf top
でリアルタイムの負荷状況を確認してみよう。そのあと perf stat
でシステム全体の統計を取り、問題がありそうなら perf record
で詳細なプロファイルを取るのが一般的な流れかな。
どの perf のコマンドを使えばいいのか、毎回悩みます…
基本的な流れを覚えておくといいよ。例えば、こんな感じの順番で使うといい。
まずシステム全体の状態を把握する
perf stat -a — sleep 5
リアルタイムで負荷の高い関数を特定する
perf top
特定のプロセスを詳しく調査する
perf record -p perf report
この流れを覚えておけば、大抵の問題には対応できるはず。
perf
コマンドの全オプション一覧
オプション | 説明 | コマンド利用例 |
---|---|---|
-h, --help | perf ヘルプコマンドを実行する。 | perf help |
-v, --version | perf のバージョンを表示する。 | perf --version |
-vv | 組み込みライブラリのステータスを表示する。 | perf -vv |
--exec-path | 実行パスを表示または設定する。 | perf --exec-path |
--html-path | HTML ドキュメントのパスを表示する。 | perf --html-path |
-p, --paginate | ページャーを設定する。 | perf --paginate |
--no-pager | ページャーを設定しない。 | perf --no-pager |
--buildid-dir | buildid キャッシュディレクトリを設定する(設定ファイルの buildid.dir より優先)。 | perf --buildid-dir /path/to/cache |
--list-cmds | 一般的に使用される perf コマンドを一覧表示する。 | perf --list-cmds |
--list-opts | 利用可能な perf オプションを一覧表示する。 | perf --list-opts |
--debugfs-dir | debugfs ディレクトリを設定する、または環境変数 PERF_DEBUGFS_DIR を設定する。 | perf --debugfs-dir /sys/kernel/debug |
--debug | デバッグ変数を 0~10 の範囲で設定する(例: `--debug verbose=2` で verbose を 2 に設定)。 | perf --debug verbose=2 |
--debug-file | デバッグ出力を指定したファイルに書き込む。 | perf --debug-file debug.log |
ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。