Linuxのperfコマンド完全ガイド!オプション一覧と使い方を徹底解説【パフォーマンス解析入門】

最終更新日 2025年1月31日

先輩エンジニア
先輩エンジニア

perfコマンドの全オプション一覧を確認したい人は↓からジャンプしてください!

perf コマンドの全オプション一覧

スポンサーリンク

perf コマンドの基本

perf(Performance Counters for Linux)は、Linuxカーネルに組み込まれているパフォーマンス解析ツールです。主に以下のような用途に使われます。

  • システム全体または特定のプロセスのCPU使用率を測定
  • プロセスの関数呼び出し回数や実行時間を解析
  • キャッシュミスや分岐予測ミスなどのハードウェア性能を測定
perfコマンドの基本と応用

Linuxカーネルに組み込まれたパフォーマンス解析ツール、perfの使い方を解説します。システム全体や特定プロセスのCPU使用率測定、関数呼び出し解析、ハードウェア性能測定など、様々な用途に活用できます。
perfコマンドの基本と応用
スポンサーリンク

perfの基本的な使い方

perfコマンドの基本的な使い方を紹介します。

  1. 主要なサブコマンド一覧
  2. perf stat の基本的な使い方
  3. perf record の基本的な使い方

perfコマンドの基本的な使い方は以下の記事でまとめているので良かったらみてみてください!

スポンサーリンク

主要なサブコマンド一覧

perfは複数のサブコマンドを持っていますが、よく使われるのは以下の3つです。

サブコマンド説明
perf statシステム全体や特定のプロセスの統計情報を取得
perf recordパフォーマンスデータを記録し、詳細なプロファイルを取得
perf report記録したデータを解析し、どの関数が時間を消費しているかを可視化
perfの主要サブコマンド

perf stat

システム全体や特定プロセスの統計情報を取得します。

perf record

パフォーマンスデータを記録し、詳細なプロファイルを取得します。

perf report

記録したデータを解析し、関数の時間消費を可視化します。
perfの主要サブコマンド
スポンサーリンク

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 statの基本的な使い方

システム全体の測定

perf stat -a -- sleep 5 コマンドで、5秒間システム全体のCPU統計を収集します。

特定プロセスの測定

-p オプションを使用して、特定のプロセスの統計情報を取得できます。例:perf stat -p 1234
perf statの基本的な使い方
スポンサーリンク

perf record の基本的な使い方

perf recordは、プロセスの詳細なプロファイルを取得するために使用されます。

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

perf record ./my_program

このコマンドは、my_programの実行中にどの関数がどれだけの時間を消費しているかを記録します。

新人エンジニア
新人エンジニア

関数の呼び出し階層(コールグラフ)を記録するには?

先輩エンジニア
先輩エンジニア

-gオプションを付けると、関数のコールグラフも取得できるよ。

perf record -g ./my_program
新人エンジニア
新人エンジニア

取得したデータをどうやって確認するんですか?

先輩エンジニア
先輩エンジニア

perf reportを使うと、記録したデータを解析できるよ。

perf report
perf recordの基本的な使い方

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

perf record ./my_program コマンドで、プログラム実行中の関数の時間消費を記録します。

コールグラフの記録

-g オプションを付けると、関数のコールグラフも取得できます。例:perf record -g ./my_program

データの確認

perf report コマンドで、記録したデータを解析できます。
perf recordの基本的な使い方
スポンサーリンク

perf コマンドの主要オプション一覧と使い方

ここでは、perf コマンドの主要なサブコマンドと、それぞれで使用できるオプションを詳しく解説します。perf には多くの機能がありますが、基本的に 「データを取得するコマンド」「取得したデータを分析するコマンド」 に分けられます。

  1. perf stat のオプション(システム全体の統計取得)
  2. perf record のオプション(プロファイリングデータを記録)
  3. perf report のオプション(記録データを解析
  4. perf top のオプション(リアルタイムでパフォーマンス監視)
サブコマンド目的主要オプション
perf statシステム全体や特定のプロセスの統計情報を取得-e, -a, --interval-print
perf recordパフォーマンスデータを記録し、詳細なプロファイルを取得-g, -F, -p
perf report記録したデータを解析し、どの関数が時間を消費しているかを可視化--sort, --stdio
perf topリアルタイムで負荷の高い関数を監視-p, -e
perfコマンドの主要オプション

サブコマンド

目的

主要オプション

perf stat

統計情報取得

-e, -a, --interval-print

perf record

プロファイル取得

-g, -F, -p

perf report

データ解析

--sort, --stdio

perf top

リアルタイム監視

-p, -e
perfコマンドの主要オプション

それでは、各サブコマンドの詳細と、実際の使い方を見ていきましょう。

スポンサーリンク

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 statのオプション詳細

-e

計測するイベントを指定します(例:cycles, instructions)。

-a

システム全体の統計を収集します。

--interval-print

指定した間隔で統計情報を表示します。
perf statのオプション詳細
スポンサーリンク

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 recordのオプション詳細

-g オプション

コールグラフ(関数の呼び出し階層)を記録します。

-F オプション

サンプリング頻度を指定します(例:-F 99)。

-p オプション

特定のプロセスを対象に記録します。
perf recordのオプション詳細
スポンサーリンク

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 topperf record を使って詳細に調査できます。

リアルタイムでCPU使用率の高い関数を特定

まず、perf top を使って、負荷の高い関数をリアルタイムで確認します。

perf top

このコマンドを実行すると、CPUリソースを最も消費している関数が一覧表示されます。

特定のプロセスのCPU使用状況を記録

負荷が高いプロセスが特定できたら、perf record で詳細なプロファイルを取得します。

perf record -p <PID>
perf report

このコマンドにより、プロセスのどの関数が時間を消費しているのかを詳細に分析できます。

よくある質問(Q&A)

新人エンジニア
新人エンジニア

システムが重いんですが、どのプロセスが原因か分かりません。

先輩エンジニア
先輩エンジニア

まずは tophtop を使って、CPUを大量に使っているプロセスの PID を確認しよう。それが分かったら perf top で関数レベルの詳細を見てみるといい。

新人エンジニア
新人エンジニア

特定のプロセスだけ perf top で監視できますか?

先輩エンジニア
先輩エンジニア

-p <PID> オプションを使えば、特定のプロセスだけに絞って監視できるよ。

perf top -p 1234
新人エンジニア
新人エンジニア

関数ごとの実行時間を詳しく分析したいときは?

先輩エンジニア
先輩エンジニア

perf record -g で関数の呼び出し階層(コールグラフ)を含めて記録すると、ボトルネックの原因がより明確になる。

perf record -g -p 1234
perf report
CPUボトルネックの特定

perf top

リアルタイムでCPU使用率の高い関数を特定します。

perf record

特定のプロセスのCPU使用状況を記録します。

perf report

記録したデータを解析し、時間を消費している関数を特定します。
CPUボトルネックの特定
スポンサーリンク

メモリ使用状況の分析

メモリ使用量が異常に増加する場合、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
メモリとI/Oの分析

メモリ使用状況の分析

perf mem record と perf mem report コマンドを使用して、メモリアクセスの傾向を分析できます。

I/Oパフォーマンスの測定

perf trace -p コマンドを使用して、プロセスが発行しているシステムコールをリアルタイムで表示できます。
メモリとI/Oの分析
スポンサーリンク

perf の便利なオプションまとめ【チートシート】

ここまで、perf コマンドの基本的な使い方や応用例を解説してきました。本章では、特に よく使うオプションチートシート形式 でまとめます。

また、実際の分析で役立つ perf コマンドの組み合わせ例 も紹介するので、必要に応じてコピーして活用してください。

以下は、perf の主要なサブコマンドと、そのオプションを簡潔にまとめた一覧です。

perfコマンドのチートシート

CPU統計取得

perf stat -a -- sleep 10

プロセスプロファイリング

perf record -p 1234 && perf report

コールグラフ分析

perf record -g ./my_program && perf report

キャッシュミス測定

perf stat -e cache-misses -p 1234
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つ紹介します。

  1. CPU 使用率の統計を取得する
  2. 特定のプロセスのパフォーマンスを記録する
  3. コールグラフ付きで関数の呼び出し関係を分析する
  4. キャッシュミスを測定する
  5. I/O システムコールをトレースする

① 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 recordperf stat を使って詳しく調査できる。

スポンサーリンク

まとめ

本記事では、perf コマンドの基本から応用まで詳しく解説しました。perf は、Linux システムのパフォーマンスを分析し、CPU やメモリ、I/O のボトルネックを特定するために欠かせないツールです。

perf コマンドの重要性

perf は、アプリケーションやシステムのパフォーマンス問題を特定し、最適化するために役立ちます。特に以下のような場面で有効です。

  • CPU 使用率が高いときperf statperf 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, --helpperf ヘルプコマンドを実行する。perf help
-v, --versionperf のバージョンを表示する。perf --version
-vv組み込みライブラリのステータスを表示する。perf -vv
--exec-path実行パスを表示または設定する。perf --exec-path
--html-pathHTML ドキュメントのパスを表示する。perf --html-path
-p, --paginateページャーを設定する。perf --paginate
--no-pagerページャーを設定しない。perf --no-pager
--buildid-dirbuildid キャッシュディレクトリを設定する(設定ファイルの buildid.dir より優先)。perf --buildid-dir /path/to/cache
--list-cmds一般的に使用される perf コマンドを一覧表示する。perf --list-cmds
--list-opts利用可能な perf オプションを一覧表示する。perf --list-opts
--debugfs-dirdebugfs ディレクトリを設定する、または環境変数 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セキュリティスペシャリストなどの資格を保有しています。