31.3. bcc-tools でパフォーマンスの分析


BPF Compiler Collection (BCC) ライブラリーにあらかじめ用意されているプログラムを使用して、イベント単位でシステムパフォーマンスを分析します。BCC ライブラリーにあるプログラムを参考に、独自のプログラムを作成することもできます。

前提条件

手順

  • execsnoop を使用して新しいシステムプロセスを調べます。

    1. 1 つのコマンドラインセッションで、execsnoop プログラムを実行します。

      # /usr/share/bcc/tools/execsnoop
    2. 別のコマンドラインセッションで、実行時間が短い ls コマンドのプロセスを作成するために、次のように入力します。

      $ ls /usr/share/bcc/tools/doc/
    3. execsnoop を実行しているコマンドラインセッションに、以下のような出力が表示されます。

      PCOMM	PID    PPID   RET ARGS
      ls   	8382   8287     0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/
      ...

      execsnoop プログラムは、システムリソースを消費する新しいプロセスごとに 1 つの行を出力します。また、ls などの非常に短期間に実行されるプログラムのプロセスを検出します。なお、ほとんどの監視ツールはそれらを登録しません。

      execsnoop 出力には以下のフィールドが表示されます。

      PCOMM
      プロセス名。(ls)
      PID
      プロセス ID。(8382)
      PPID
      親プロセス ID。(8287)
      RET
      exec() システムコールの戻り値 (0)。プログラムコードを新規プロセスに読み込みます。
      ARGS
      引数を使用して起動したプログラムの場所。

      execsnoop の詳細、例、オプションについては、/usr/share/bcc/tools/doc/execsnoop_example.txt ファイルを参照してください。exec() の詳細は、exec(3) man ページを参照してください。

  • opensnoop を使用して、コマンドにより開かれるファイルを追跡します。

    1. 1 つのコマンドラインセッションで、opensnoop プログラムを実行し、uname コマンドのプロセスによってのみ開かれたファイルの出力を表示します。

      # /usr/share/bcc/tools/opensnoop -n uname
    2. 別のコマンドラインセッションで、特定のファイルを開くコマンドを入力します。

      $ uname
    3. opensnoop を実行しているコマンドラインセッションに、以下のような出力が表示されます。

      PID    COMM 	FD ERR PATH
      8596   uname 	3  0   /etc/ld.so.cache
      8596   uname 	3  0   /lib64/libc.so.6
      8596   uname 	3  0   /usr/lib/locale/locale-archive
      ...

      opensnoop プログラムは、システム全体で open() システム呼び出しを監視し、uname が開こうとしたファイルごとに出力行を出力します。

      opensnoop 出力には、以下のフィールドが表示されます。

      PID
      プロセス ID。(8596)
      COMM
      プロセス名。(uname)
      FD
      ファイルの記述子。開いたファイルを参照するために open() が返す値です。(3)
      ERR
      すべてのエラー。
      PATH
      open() で開こうとしたファイルの場所。

      コマンドが、存在しないファイルを読み込もうとすると、FD コラムは -1 を返し、ERR コラムは関連するエラーに対応する値を出力します。その結果、opensnoop は、適切に動作しないアプリケーションの特定に役立ちます。

      opensnoop の詳細、例、オプションについては、/usr/share/bcc/tools/doc/opensnoop_example.txt ファイルを参照してください。open() の詳細は、open(2) man ページを参照してください。

  • biotop を使用して、ディスク上で I/O 操作を実行している上位のプロセスを監視します。

    1. 1 つのコマンドラインセッションで、引数 30 を指定して biotop プログラムを実行し、30 秒のサマリーを生成します。

      # /usr/share/bcc/tools/biotop 30
      注記

      引数を指定しないと、デフォルトでは 1 秒ごとに出力画面が更新されます。

    2. 別のコマンドラインセッションで、ローカルハードディスクデバイスからコンテンツを読み込み、その出力を /dev/zero ファイルに書き込むコマンドを入力します。

      # dd if=/dev/vda of=/dev/zero

      この手順では、biotop を示す特定の I/O トラフィックを生成します。

    3. biotop を実行しているコマンドラインセッションに、以下のような出力が表示されます。

      PID    COMM             D MAJ MIN DISK       I/O  Kbytes     AVGms
      9568   dd               R 252 0   vda      16294 14440636.0  3.69
      48     kswapd0          W 252 0   vda       1763 120696.0    1.65
      7571   gnome-shell      R 252 0   vda        834 83612.0     0.33
      1891   gnome-shell      R 252 0   vda       1379 19792.0     0.15
      7515   Xorg             R 252 0   vda        280  9940.0     0.28
      7579   llvmpipe-1       R 252 0   vda        228  6928.0     0.19
      9515   gnome-control-c  R 252 0   vda         62  6444.0     0.43
      8112   gnome-terminal-  R 252 0   vda         67  2572.0     1.54
      7807   gnome-software   R 252 0   vda         31  2336.0     0.73
      9578   awk              R 252 0   vda         17  2228.0     0.66
      7578   llvmpipe-0       R 252 0   vda        156  2204.0     0.07
      9581   pgrep            R 252 0   vda         58  1748.0     0.42
      7531   InputThread      R 252 0   vda         30  1200.0     0.48
      7504   gdbus            R 252 0   vda          3  1164.0     0.30
      1983   llvmpipe-1       R 252 0   vda         39   724.0     0.08
      1982   llvmpipe-0       R 252 0   vda         36   652.0     0.06
      ...

      biotop 出力には、以下のフィールドが表示されます。

      PID
      プロセス ID。(9568)
      COMM
      プロセス名。(dd)
      DISK
      読み取り操作を実行するディスク。(vda)
      I/O
      実行された読み取り操作の数。(16294)
      Kbytes
      読み取り操作によって読み取られたキロバイト数。(14,440,636)
      AVGms
      読み取り操作の平均 I/O 時間。(3.69)

      biotop の詳細、例、およびオプションについては、/usr/share/bcc/tools/doc/biotop_example.txt ファイルを参照してください。dd の詳細は、dd(1) man ページを参照してください。

  • xfsslower を使用して、予想以上に遅いファイルシステム操作を明らかにします。

    xfsslower は、XFS ファイルシステムによる読み取り操作、書き込み操作、開く操作、または同期操作 (fsync) の実行に費やされた時間を測定します。1 引数を指定すると、1 ms よりも遅い操作のみが表示されます。

    1. 1 つのコマンドラインセッションで、xfsslower プログラムを実行します。

      # /usr/share/bcc/tools/xfsslower 1
      注記

      引数を指定しないと、xfsslower はデフォルトで 10 ms よりも低速な操作を表示します。

    2. 別のコマンドラインセッションで、vim エディターでテキストファイルを作成するコマンドを入力し、XFS ファイルシステムとのやり取りを開始します。

      $ vim text
    3. xfsslower を実行しているコマンドラインセッションに、前のステップでファイルを保存した際に、以下のような出力が表示されます。

      TIME     COMM           PID    T BYTES   OFF_KB   LAT(ms) FILENAME
      13:07:14 b'bash'        4754   R 256     0           7.11 b'vim'
      13:07:14 b'vim'         4754   R 832     0           4.03 b'libgpm.so.2.1.0'
      13:07:14 b'vim'         4754   R 32      20          1.04 b'libgpm.so.2.1.0'
      13:07:14 b'vim'         4754   R 1982    0           2.30 b'vimrc'
      13:07:14 b'vim'         4754   R 1393    0           2.52 b'getscriptPlugin.vim'
      13:07:45 b'vim'         4754   S 0       0           6.71 b'text'
      13:07:45 b'pool'        2588   R 16      0           5.58 b'text'
      ...

      各行は、特定のしきい値よりも時間がかかったファイルシステム内の操作を表しています。xfsslower は、操作に想定以上に時間がかかるなど、ファイルシステムで発生し得る問題を検出します。

      xfsslower 出力には、以下のフィールドが表示されます。

      COMM
      プロセス名。(b’bash')
      T

      操作の種類。(R)

      • Read
      • Write
      • Sync
      OFF_KB
      ファイルオフセット (KB)。(0)
      FILENAME
      読み取り、書き込み、または同期されるファイル。

      xfsslower の詳細、例、およびオプションについては、/usr/share/bcc/tools/doc/xfsslower_example.txt ファイルを参照してください。fsync の詳細は、fsync(2) man ページを参照してください。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る