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