最終更新日 2025年9月10日


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=cyclesperf top のオプション(リアルタイムでパフォーマンス監視)
perf top は、リアルタイムで関数単位のCPU負荷を監視するためのコマンドです。
| オプション | 説明 |
|---|---|
| -p | 特定のプロセスを監視 |
| -e | 特定のイベントを指定 |
使用例 負荷の高い関数をリアルタイムで監視
perf top -p 1234よくある質問(Q&A)

リアルタイムでCPU負荷を監視したいときは?

perf top を使えば、現在のCPU使用状況を関数レベルで確認できるよ。

特定のイベント(例えばキャッシュミス)だけを監視できますか?

-e オプションを使うと、特定のイベントに絞って監視できるよ。
perf top -e cache-missesperfコマンドの出力結果の見方は以下の記事で紹介しているのでよかったら見てみてください!
スポンサーリンク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 1234I/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セキュリティスペシャリストなどの資格を保有しています。






