「Linux perf」コマンド徹底解説!オプション・出力結果の見方・実践的な使い方を総まとめ

最終更新日 2025年1月29日

Linux perf とは?

Linux perf (Performance Counters for Linux) は、Linuxカーネルが提供する強力なパフォーマンス計測ツールです。
CPUやメモリ、I/O、スケジューラなど、システム全体の動作を詳細に解析し、パフォーマンスの問題を特定するのに役立ちます。

perf は パフォーマンス解析 の幅広い用途に対応しており、以下のような場面で活用されます。

  • アプリケーションの処理速度低下の原因を特定
  • CPUやI/Oのボトルネックを調査
  • システムのプロファイリング(特定の関数やスレッドのパフォーマンスを計測)
  • カーネルレベルのパフォーマンス測定

例えば、システム全体の統計情報を素早く確認したい場合や、特定のプロセスがどの関数で時間を消費しているかを深掘りする際に有用です。

Linux perfの基本と活用法

Linux perf(Performance Counters for Linux)は、Linuxカーネルが提供する強力なパフォーマンス計測ツールです。システム全体の動作を詳細に解析し、パフォーマンスの問題を特定するのに役立ちます。

perfは、アプリケーションの処理速度低下の原因特定、CPUやI/Oのボトルネック調査、システムのプロファイリング、カーネルレベルのパフォーマンス測定など、幅広い用途に対応しています。
Linux perfの基本と活用法

perf が必要な理由

システムのパフォーマンスが低下している場合、「何が問題なのか」を正確に特定するにはデータに基づいた分析が必要です。
perf を使えば、システムリソースの使用状況を詳細に記録し、最適化すべき箇所を明確にできます。

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

Linux の perf ってどんなツールですか?

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

Linux のパフォーマンス解析ツールだよ。CPU、メモリ、I/O など、システム全体の動きを調査して、ボトルネックを特定するのに使います。

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

top や htop と何が違うんですか?

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

top や htop はプロセスごとのリソース消費を表示するだけだけど、perf はどの関数やスレッドが問題なのかまで掘り下げられる。もっと詳細な分析ができるんだ。

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

具体的にはどんな問題を解決できますか?

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

例えば、CPU使用率が高いプロセスがどこで時間を使っているか、I/O待ちで遅くなっている原因、特定の関数やシステムコールがボトルネックになっていないか、といった問題を調査できるよ。

perfが必要な理由
データに基づいた分析
システムのパフォーマンスが低下している場合、「何が問題なのか」を正確に特定するにはデータに基づいた分析が必要です。
詳細な記録
perfを使えば、システムリソースの使用状況を詳細に記録し、最適化すべき箇所を明確にできます。

多角的な分析
CPU、メモリ、I/O、スケジューラなど、システム全体の動作を多角的に解析できます。
perfが必要な理由

perfコマンドの基本

ここでは perf コマンドのインストール方法、基本的な使い方、主要なサブコマンド について解説します。
perf は強力なツールですが、正しく使うためには基本的な知識が必要です。

perfの基本的な使い方

インストール

多くのLinuxディストリビューションでパッケージとして提供されています。例えば、Ubuntu/Debian系では「sudo apt install linux-perf」でインストールできます。

基本的な実行形式

perf [サブコマンド] [オプション]の形式で実行します。例えば、「perf stat ls」で特定のコマンドのCPU使用率などを計測できます。

主要なサブコマンド

perf stat、perf record、perf report、perf top、perf schedなどがあります。それぞれ異なる目的で使用します。
perfの基本的な使い方

perf コマンドのインストール方法

perf は多くの Linux ディストリビューションでパッケージとして提供されています。
以下のコマンドでインストールできます。

  • Ubuntu / Debian 系
    sudo apt install linux-perf
  • CentOS / RHEL 系
    sudo yum install perf
  • Arch Linux
    sudo pacman -S perf

一部のディストリビューションでは linux-tools パッケージとして提供されている場合もあります。

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

perf コマンドが見つからないんですが?

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

ディストリビューションによっては perf がデフォルトでインストールされていないから、which perf で確認して、なければパッケージマネージャーでインストールしてみて。

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

インストールしたのに command not found って出ます…

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

カーネルバージョンと一致しないパッケージをインストールした可能性があるね。uname -r でカーネルバージョンを確認して、対応する linux-tools-$(uname -r) をインストールするといいよ。

perf の基本的な使い方

perf は以下の形式で実行します。

perf [サブコマンド] [オプション]

例えば、perf stat を使って特定のコマンドの CPU 使用率などを計測できます。

perf stat ls

実行すると、以下のような統計情報が表示されます。

Performance counter stats for 'ls':

        0.234567  task-clock                #  0.000 CPUs utilized
            1234  context-switches          #  0.000 M/sec
            5678  cpu-migrations            #  0.000 M/sec
          901234  page-faults               #  3.456 M/sec
  12345678901234  cycles                    #  123.456 GHz

このように、perf stat はコマンド実行時のシステムパフォーマンスデータを計測できます。

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

perf を実行したら ‘Permission denied’ になりました!

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

perf は通常、root 権限が必要だから sudo perf stat ls みたいに sudo をつけて実行してみて。

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

sudo なしで使いたい場合はどうすればいいですか?

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

root 以外でも実行できるようにするには sudo sysctl -w kernel.perf_event_paranoid=1 で設定変更できるよ。ただ、セキュリティリスクもあるから注意が必要だね。

perfの主なサブコマンド

perf stat

システム全体の統計情報を取得します。

perf record

パフォーマンスデータを記録します。

perf report

記録したデータを解析します。

perf top

リアルタイムでパフォーマンスを監視します。
perfの主なサブコマンド

よく使われる主要なサブコマンド一覧

perf にはさまざまなサブコマンドがありますが、代表的なものを紹介します。

コマンド説明使用例
perf statシステム全体の統計情報を取得perf stat ls
perf recordパフォーマンスデータを記録perf record ls
perf report記録したデータを解析perf report
perf topリアルタイムでパフォーマンスを監視perf top
perf schedスケジューラの動作解析perf sched record
perf list利用可能なイベントの一覧表示perf list

詳細はこちらの記事でご覧ください:「Linux perf コマンドのオプション一覧と解説」※作成中

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

どのサブコマンドを使えばいいかわかりません…

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

まずは perf stat で簡単な統計を取ってみて、それでも問題がわからなければ perf record で詳細なデータを取るのが基本かな。リアルタイムで監視したいなら perf top が便利。

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

記録したデータを解析するには?

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

perf record でデータを取ったら、perf report で解析できるよ。どの関数や処理がボトルネックになっているのかが見えてくるよ。

perfコマンドのマニュアル
perfコマンドのマニュアル

perf の基本的な使い方を理解したところで、次は perf の出力結果の見方 について解説します。

perfコマンドの主なオプションとその解説

perf にはさまざまなサブコマンドが用意されており、用途に応じて使い分けることが重要です。
ここでは、代表的なサブコマンドの概要を紹介します。

perf stat(システム全体の統計情報を取得)

特定のコマンドやプロセスの実行時に、CPU使用率やキャッシュミスなどの統計データを収集する。

perf stat ls

実行結果

Performance counter stats for 'ls':

        0.234567  task-clock                #  0.000 CPUs utilized
            1234  context-switches          #  0.000 M/sec
            5678  cpu-migrations            #  0.000 M/sec
          901234  page-faults               #  3.456 M/sec
  12345678901234  cycles                    #  123.456 GHz
新人エンジニア
新人エンジニア

perf stat の出力結果、何を見ればいいかわかりません…

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

CPU 使用時間 (task-clock) やコンテキストスイッチ (context-switches)、ページフォルト (page-faults) などが重要だよ。処理の負荷がどこにあるかを確認するのに役立つよ。

Centosにおけるperf stat lsコマンドの実際の出力結果
Centosにおけるperf stat lsコマンドの実際の出力結果

perf record(パフォーマンスデータの記録)

特定のコマンドを実行し、そのプロファイルデータを収集する。

perf record ls

このコマンドを実行すると、perf.data というバイナリファイルが生成される。
このデータを後で perf report で解析できる。

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

perf record を実行したら perf.data ってファイルができました。これってどう使うんですか?

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

このデータを perf report で解析すると、どの関数がどれくらい時間を使ったのかが分かるよ。

Centosにおけるperf record lsコマンドの実際の出力結果
Centosにおけるperf record lsコマンドの実際の出力結果

perf report(記録したデータの分析)

perf record で収集したデータを解析し、どの関数やシンボルが多くのリソースを使用しているかを表示する。

perf report

実行すると、関数ごとの CPU 使用時間などが出力されます。

実際の出力結果

# Overhead  Command  Shared Object      Symbol
# ........  .......  .................  ........................
    30.12%  ls       libc.so.6          [.] __strcmp_avx2
    20.45%  ls       libc.so.6          [.] __memcmp_avx2_movbe
    15.23%  ls       ls                 [.] print_long_format
    10.11%  ls       libc.so.6          [.] opendir
     5.89%  ls       libc.so.6          [.] readdir</code>
新人エンジニア
新人エンジニア

perf report の出力がたくさんあって、どこを見ればいいのかわかりません…

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

カラムの ‘Overhead’ が高い関数がパフォーマンスのボトルネックになっている可能性があるよ。まずはこの値が高い関数をチェックするといいよ。

Centosにおけるperf reportコマンドの実際の出力結果
Centosにおけるperf reportコマンドの実際の出力結果

perf top(リアルタイムでのパフォーマンス監視)

top コマンドのように、リアルタイムでパフォーマンスデータを表示します。

perf top

実行すると、現在動作しているプロセスやスレッドの CPU 使用状況がリアルタイムで更新されます。

perf top の出力結果

Samples: 2K of event 'cpu-clock', 1000 Hz, Event count (approx.): 2000000
Overhead  Shared Object              Symbol
  30.21%  libc.so.6                  [.] __memcmp_avx2_movbe
  18.45%  vmlinux                    [k] native_sched_clock
  12.32%  ls                         [.] print_long_format
   8.91%  libc.so.6                  [.] opendir
   7.55%  vmlinux                    [k] schedule
   6.12%  ls                         [.] main
   4.98%  libc.so.6                  [.] readdir
   3.29%  vmlinux                    [k] __x64_sys_futex
新人エンジニア
新人エンジニア

perf top って top コマンドと何が違うんですか?

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

top はプロセスごとのCPU使用率を表示するだけだけど、perf top はどの関数が CPU を多く使っているのかまで表示できるんだ。

perf sched(スケジューラの動作解析)

スケジューラの動作を記録し、プロセスのスイッチングやスレッドの挙動を分析します。

perf sched record

記録後、以下のコマンドで解析できる。

perf sched latency

実際の出力結果

  Task            |   Runtime  |   Switches | Average delay | Maximum delay
------------------+-----------+------------+---------------+--------------
  bash           |  50.12 ms  |        12  |       4.18 ms |      12.45 ms
  sleep          |  10.00 ms  |         2  |       5.00 ms |      10.00 ms
  kworker/1:0    |  30.34 ms  |        25  |       1.21 ms |       6.78 ms
新人エンジニア
新人エンジニア

perf sched ってどんなときに使うんですか?

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

スレッドのスケジューリング遅延や、CPU コア間の移動(migration)がパフォーマンスに影響を与えているかを調べるときに使うよ。

Centosにおけるperf sched latencyコマンドの実際の出力結果
Centosにおけるperf sched latencyコマンドの実際の出力結果

perf list(利用可能なイベントの一覧表示)

perf で取得可能なイベント(CPU の各種統計、キャッシュミス、メモリアクセスなど)の一覧を表示する。

perf list

実際の出力結果(一部抜粋)

List of pre-defined events (to be used in -e):
  
  branch-misses                 [Hardware event]
  cache-misses                  [Hardware event]
  cpu-cycles                    [Hardware event]
  instructions                  [Hardware event]
  page-faults                   [Software event]
  context-switches              [Software event]
  task-clock                    [Software event]
  sched:sched_switch            [Tracepoint event]
  syscalls:sys_enter_read        [Tracepoint event]
  syscalls:sys_enter_write       [Tracepoint event]
新人エンジニア
新人エンジニア

perf list って何に使うんですか?

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

どんな種類のイベントが計測できるかを確認するのに使うよ。例えば perf stat -e cache-misses ls のように、特定のイベントを指定して計測できるよ。

Centosにおけるperf listコマンドの実際の出力結果
Centosにおけるperf listコマンドの実際の出力結果

詳細はこちらの記事でご覧ください:「Linux perf コマンドのオプション一覧と解説」※作成中

perf の主なオプションを理解したところで、次は perf の出力結果の見方 について解説します。

perfコマンドの出力結果の見方

perf コマンドを使用すると、システムのパフォーマンスに関する詳細なデータが取得できます。
しかし、出力される情報が多く、どの数値をどのように解釈すればよいのか戸惑うこともあるでしょう。

ここでは、代表的な perf の出力結果の見方 について解説します。

perf stat の出力結果の見方

perf stat は、特定のコマンドの実行中に取得したパフォーマンスカウンタの統計を表示します。

実行コマンド

perf stat ls

出力結果

Performance counter stats for 'ls':

        0.234567  task-clock                #  0.000 CPUs utilized
            1234  context-switches          #  0.000 M/sec
            5678  cpu-migrations            #  0.000 M/sec
          901234  page-faults               #  3.456 M/sec
  12345678901234  cycles                    #  123.456 GHz
新人エンジニア
新人エンジニア

perf stat の出力結果、どの値をチェックすればいいですか?

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

基本的には task-clock(CPU 使用時間)、context-switches(コンテキストスイッチの回数)、page-faults(ページフォルトの発生数)、cycles(CPU サイクル数)あたりをチェックするといいよ。

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

context-switches が多いと何が問題なんですか?

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

コンテキストスイッチが多すぎると、CPU のオーバーヘッドが増えて処理が遅くなる可能性がある。マルチスレッドのアプリケーションでは特に注意したい指標だね。

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

cycles は何を意味しているんですか?

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

CPU のクロックサイクル数だよ。一般的には、サイクル数が多いほど CPU の負荷が高いことを意味する。ただし、プロセッサのアーキテクチャによっても異なるから、他の指標と合わせて分析するといい。

詳細はこちらの記事でご覧ください:「Linux perf stat の出力結果の読み方」※作成中

perf statの出力結果の見方

主要な項目

task-clock:CPU使用時間

context-switches:コンテキストスイッチの回数

cpu-migrations:CPUマイグレーションの回数

page-faults:ページフォールトの発生数

cycles:CPUサイクル数

解釈のポイント

task-clockが高いほどCPU負荷が高く、context-switchesが多すぎるとオーバーヘッドの原因となる可能性があります。page-faultsが頻繁に発生するとパフォーマンス低下の可能性がありま
perf statの出力結果の見方

perf report の出力結果の見方

perf record で取得したデータを perf report で解析すると、どの関数が多くの CPU 時間を消費しているのかが分かります。

実行コマンド

perf record ls
perf report

出力結果(抜粋)

# Overhead  Command  Shared Object      Symbol
# ........  .......  ................  .......................
   35.67%   ls       libc.so.6         [.] readdir
   20.45%   ls       libc.so.6         [.] strcmp
   15.23%   ls       libc.so.6         [.] malloc
新人エンジニア
新人エンジニア

perf report の ‘Overhead’ って何ですか?

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

‘Overhead’ は、その関数がどれくらいの CPU 時間を消費したかの割合を示している。数値が高いほど、その関数がボトルネックになっている可能性があるよ。

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

特定の関数だけを解析したい場合はどうすればいいですか?

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

perf report--symbol オプションをつけると、特定の関数だけを抽出できるよ。例えば perf report --symbol=readdir みたいに使うよ。

詳細はこちらの記事でご覧ください:「Linux perf report の出力結果の見方」※作成中

perf reportの出力結果の見方

perf reportは、perf recordで取得したデータを解析し、どの関数が多くのCPU時間を消費しているのかを表示します。

Overhead

関数がどれくらいのCPU時間を消費したかの割合を示します。数値が高いほど、その関数がボトルネックになっている可能性があります。

Command

対象のコマンドやプロセス名を表示します。

Shared Object

関数が含まれるライブラリやオブジェクトファイルを示します。

Symbol

関数名を表示します。これを見ることで、どの関数が多くのCPU時間を消費しているかがわかります。
perf reportの出力結果の見方

perf top の出力結果の見方

perf toptop コマンドのように、リアルタイムでパフォーマンスデータを表示します。
どの関数が CPU を多く使っているかをリアルタイムで確認できます。

実行コマンド

perf top

出力結果(抜粋)

Overhead  Shared Object      Symbol
   40.32%  libc.so.6         [.] readdir
   30.12%  myapp             [.] process_data
   10.45%  kernel            [.] schedule
新人エンジニア
新人エンジニア

perf top で ‘kernel’ の関数が上位に出てくるのは問題ですか?

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

‘Overhead’ は、その関数がどれくらいの CPU 時間を消費したかの割合を示している。数値が高いほど、その関数がボトルネックになっている可能性があるよ。

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

アプリケーションの特定の関数だけを perf top で見たいです。

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

perf top -p <PID> を使えば、特定のプロセスの情報だけを表示できるよ。

Centosにおけるperf topコマンドの実際の出力結果
Centosにおけるperf topコマンドの実際の出力結果

詳細はこちらの記事でご覧ください:「Linux perf top の結果の見方と活用方法」※作成中

どの指標を重視すべきか?

perf の出力には多くの情報がありますが、特に以下の指標が重要です。

指標説明重要ポイント
task-clockCPU がタスクを処理した時間高いほど CPU 負荷が高い
context-switchesコンテキストスイッチの回数多すぎるとオーバーヘッドの原因
page-faultsページフォルトの発生数頻繁に発生するとパフォーマンス低下の可能性
cyclesCPU サイクル数高いほど CPU 使用量が多い
Overhead (perf report)関数ごとの CPU 使用率数値が高い関数はボトルネックの可能性
新人エンジニア
新人エンジニア

結局、どの指標を優先的に見ればいいんでしょうか?

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

まずは task-clockOverhead を見て、CPU を多く消費しているプロセスや関数を特定するのが基本。その後、context-switchespage-faults も確認して、何が原因で処理が遅くなっているのかを分析するといいよ。

詳細はこちらの記事でご覧ください:「Linux perf の出力結果を正しく読む方法」※作成中

次は、実際の現場での活用事例 について解説します。

現場で使える「perf」コマンド活用事例

ここまでで perf コマンドの基本的な使い方や出力結果の見方を学びました。
しかし、実際の現場ではどのように perf を活用すればよいのでしょうか?

この章では、具体的なユースケースをもとに、perf を活用したパフォーマンス解析の方法 を解説します。

CPU 負荷が高いプロセスを特定する

問題
特定のプロセスが CPU を大量に消費しているが、どの関数がボトルネックになっているのかわからない。

手順

top コマンドで CPU 負荷の高いプロセスの PID を確認

top -o %CPU

perf top でリアルタイムの CPU 使用状況を分析

perf top

perf record で負荷の高いプロセスのプロファイリングを取得

perf record -p <PID

perf report で関数ごとの CPU 使用率を分析

perf report
新人エンジニア
新人エンジニア

サーバーの CPU 使用率が異常に高いんですが、何が原因かわかりません…

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

まず top で CPU 負荷の高いプロセスを特定しよう。その後、perf topperf record を使って、どの関数が CPU を多く消費しているのかを調べるといいよ。

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

perf top の結果を見ると libc.so.6malloc が多く出ています。これは問題ですか?

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

malloc が多いということは、メモリ割り当てが頻繁に発生している可能性があるね。コードの中で不要なメモリ確保がないかチェックするといいよ。

詳細はこちらの記事でご覧ください:「Linux perf を使った CPU 負荷の高いプロセスの特定方法」※作成中

CPU負荷が高いプロセスを特定する

topコマンドでCPU負荷の高いプロセスのPIDを確認

「top -o %CPU」を実行して、CPU使用率の高いプロセスを特定します。

perf topでリアルタイムのCPU使用状況を分析

「perf top」を実行して、どの関数がCPUを多く使用しているかをリアルタイムで確認します。

perf recordで負荷の高いプロセスのプロファイリングを取得

「perf record -p [PID]」を実行して、特定のプロセスのパフォーマンスデータを記録します。

perf reportで関数ごとのCPU使用率を分析

「perf report」を実行して、記録したデータを解析し、どの関数がCPUを多く使用しているか
CPU負荷が高いプロセスを特定する

I/O がボトルネックになっているか調査する

問題
アプリケーションの動作が遅いが、CPU 使用率は低い。I/O の影響を調査したい。

手順

iostat でディスク I/O の状況を確認

iostat -x 1

perf record でシステム全体の I/O を監視

perf record -a -g -- sleep 5

❸report で I/O に関連するシステムコールを調査

perf report --sort=dso
新人エンジニア
新人エンジニア

アプリが遅いのに CPU 使用率は低いです。何を疑うべきでしょうか?

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

CPU 負荷が低いのに遅い場合、I/O がボトルネックになっている可能性があるね。まず iostat でディスク I/O の状況を確認してみよう。

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

perf report を実行したら read()write() が多く出てきました。これは何を意味しますか?

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

これはプロセスが頻繁にファイルを読み書きしていることを示している。大量の小さな I/O 操作が発生していないか、バッファリングを適切に使っているかを確認するといいよ。

詳細はこちらの記事でご覧ください:「Linux perf を使った I/O ボトルネックの調査方法」

I/Oがボトルネックになっているか調査する

iostatでディスクI/Oの状況を確認

「iostat -x 1」を実行して、ディスクI/Oの状況をリアルタイムで確認します。

perf recordでシステム全体のI/Oを監視

「perf record -a -g -- sleep 5」を実行して、システム全体のI/O関連のパフォーマンスデータを記録します。

perf reportでI/Oに関連するシステムコールを調査

「perf report --sort=dso」を実行して、I/Oに関連するシステムコールの使用状況を分析します。
I/Oがボトルネックになっているか調査する

特定の関数やスレッドのパフォーマンスを解析する

問題
アプリケーションの処理が遅く、どの関数がボトルネックになっているのか調べたい。

手順

perf record でアプリケーションのプロファイリングを取得する

perf record -g -p <PID

perf report で関数ごとの CPU 使用率を確認する

perf report

perf annotate で詳細な命令レベルの分析を実施する

perf annotate
新人エンジニア
新人エンジニア

アプリケーションの特定の処理が遅いです。どの関数が原因か調べる方法はありますか?

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

perf record でプロファイリングデータを取得して、perf report で関数ごとの CPU 使用率を見てみよう。もし命令単位で解析したいなら perf annotate も使えるよ。

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

perf reportstd::vector<int>::push_back が高い割合を占めていました。これは改善できますか?

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

std::vector の動的メモリ確保が原因で遅くなっているかもね。reserve() を使って事前に容量を確保すれば改善するかもしれないね。

詳細はこちらの記事でご覧ください:「Linux perf を使った関数・スレッドのパフォーマンス解析」※作成中

特定の関数やスレッドのパフォーマンスを解析する

perf record

アプリケーションのプロファイリングを取得

perf report

関数ごとのCPU使用率を確認

perf annotate

詳細な命令レベルの分析を実施

これらのステップを通じて、アプリケーションの処理が遅い原因となっている関数やスレッドを特定し、最適化の方針を立てることができます。
特定の関数やスレッドのパフォーマンスを解析する

実際のトラブルシューティング事例と対応方法

実際の開発・運用環境で perf を活用した事例をいくつか紹介します。

ケース 1 ある Web サーバーで CPU 使用率が異常に高い

  • 調査手順 perf topperf recordperf report
  • 原因 特定のリクエスト処理で regex_match() の CPU 使用率が 50% を超えていた
  • 対応 正規表現の処理を簡略化することで CPU 負荷を削減

ケース 2 バッチ処理の実行時間が異常に長い

  • 調査手順 perf record -gperf reportperf annotate
  • 原因 ループ内で大量のメモリ確保 (malloc/free) が発生していた
  • 対応 メモリ確保の回数を減らし、std::vector::reserve() を適用
新人エンジニア
新人エンジニア

実際に perf を使って問題を解決した例を知りたいです。

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

例えば、Web サーバーのレスポンスが遅いときに perf でボトルネックを特定し、処理を最適化して高速化できたことがあるよ。

詳細はこちらの記事でご覧ください:「Linux perf を使ったトラブルシューティング事例集」※作成中

まとめ:Linux perfを活用してパフォーマンス改善を!

perfの強み

システムやアプリケーションのパフォーマンスを詳細に分析し、ボトルネックを数値で示すことができます。

次のステップ

eBPF、ftrace、strace/ltraceなどの関連ツールを学ぶことで、より高度なパフォーマンス分析が可能になります。

実践的な活用

学んだ知識を活かして、実際のシステムのボトルネック解析に挑戦してみましょう。
Linux perfを活用してパフォーマンス改善を!

この記事も参考になるかも!
この記事を書いた人!

ゴリタン

インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。

CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。