42.2. bcc-tools でパフォーマンスの分析
BPF Compiler Collection (BCC) ライブラリーから事前に作成された特定のプログラムを使用して、システムパフォーマンスをイベントごとに効率的かつセキュアに分析します。BCC ライブラリーで事前作成されたプログラムセットは、追加プログラム作成の例として使用できます。
前提条件
- bcc-tools パッケージがインストールされている
- root 権限がある。
手順
execsnoop
を使用してシステムプロセスを調べる-
1 つの端末で
execsnoop
プログラムを実行します。
# /usr/share/bcc/tools/execsnoop
ls
コマンドの短期的なプロセスを作成するために、別のターミナルで次のように入力します。$ ls /usr/share/bcc/tools/doc/
execsnoop
を実行している端末は、以下のような出力を表示します。PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...
execsnoop
プログラムは、システムリソースを消費する新しいプロセスごとに 1 つの行を出力します。また、ls
などの非常に短期間に実行されるプログラムのプロセスを検出します。なお、ほとんどの監視ツールはそれらを登録しません。execsnoop
出力には以下のフィールドが表示されます。
-
1 つの端末で
- 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 つのターミナルで
opensnoop
プログラムを実行し、uname
コマンドのプロセスによってのみ開かれたファイルを出力します。
# /usr/share/bcc/tools/opensnoop -n uname
別のターミナルで、特定のファイルを開くコマンドを入力します。
$ uname
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
は、適切に動作しないアプリケーションの特定に役立ちます。
-
1 つのターミナルで
opensnoop
の詳細、例、オプションについては、/usr/share/bcc/tools/doc/opensnoop_example.txt
ファイルを参照してください。
open()
の詳細は、open(2)
man ページを参照してください。
biotop
を使用して、ディスク上で I/O 操作を実行している上位のプロセスを監視する-
1 つのターミナルで
biotop
プログラムを引数30
を指定して実行し、30 秒間のサマリーを生成します。
# /usr/share/bcc/tools/biotop 30
注記引数を指定しないと、デフォルトでは 1 秒ごとに出力画面が更新されます。
別のターミナルで、次のコマンドを入力して、ローカルハードディスクデバイスからコンテンツを読み取り、出力を
/dev/zero
ファイルに書き込みます。# dd if=/dev/vda of=/dev/zero
この手順では、
biotop
を示す特定の I/O トラフィックを生成します。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
出力には、以下のフィールドが表示されます。
-
1 つのターミナルで
- PID
-
プロセス ID。(
9568
) - COMM
-
プロセス名。(
dd
) - DISK
-
読み取り操作を実行するディスク。(
vda
) - I/O
- 実行された読み取り操作の数。(16294)
- Kbytes
- 読み取り操作によって使用したバイト数 (KB)。(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 つのターミナルで
xfsslower
プログラムを実行します。# /usr/share/bcc/tools/xfsslower 1
注記引数を指定しないと、
xfsslower
はデフォルトで 10 ms よりも低速な操作を表示します。別のターミナルで、
vim
エディターでテキストファイルを作成するコマンドを入力して、XFS ファイルシステムとのやり取りを開始します。$ vim text
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
の詳細は、man ページの fsync(2)
を参照してください。