28.2. bcc-tools でパフォーマンスの分析
BPF Compiler Collection (BCC) ライブラリーから事前に作成された特定のプログラムを使用して、システムパフォーマンスをイベントごとに効率的かつセキュアに分析します。BCC ライブラリーで事前作成されたプログラムセットは、追加プログラム作成の例として使用できます。
前提条件
- bcc-tools パッケージがインストールされている
- root 権限がある。
手順
execsnoopを使用してシステムプロセスを調べる-
1 つのターミナルで
execsnoopプログラムを実行します。
/usr/share/bcc/tools/execsnoop
# /usr/share/bcc/tools/execsnoopCopy to Clipboard Copied! Toggle word wrap Toggle overflow lsコマンドの短期的なプロセスを作成するために、別のターミナルで次のように入力します。ls /usr/share/bcc/tools/doc/
$ ls /usr/share/bcc/tools/doc/Copy to Clipboard Copied! Toggle word wrap Toggle overflow execsnoopを実行している端末に、次のような出力が表示されます。PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...
PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# /usr/share/bcc/tools/opensnoop -n unameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 別のターミナルで、特定のファイルを開くコマンドを入力します。
uname
$ unameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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 ...
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 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# /usr/share/bcc/tools/biotop 30Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記引数を指定しないと、デフォルトでは 1 秒ごとに出力画面が更新されます。
別のターミナルで、次のコマンドを入力して、ローカルハードディスクデバイスからコンテンツを読み取り、出力を
/dev/zeroファイルに書き込みます。dd if=/dev/vda of=/dev/zero
# dd if=/dev/vda of=/dev/zeroCopy to Clipboard Copied! Toggle word wrap Toggle overflow この手順では、
biotopを示す特定の I/O トラフィックを生成します。biotopを実行している端末は、以下のような出力を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow biotop出力には、以下のフィールドが表示されます。
-
1 つのターミナルで
- 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 つのターミナルで
xfsslowerプログラムを実行します。/usr/share/bcc/tools/xfsslower 1
# /usr/share/bcc/tools/xfsslower 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記引数を指定しないと、
xfsslowerはデフォルトで 10 ms よりも低速な操作を表示します。別のターミナルで、
vimエディターでテキストファイルを作成するコマンドを入力して、XFS ファイルシステムとのやり取りを開始します。vim text
$ vim textCopy to Clipboard Copied! Toggle word wrap Toggle overflow 前の手順でファイルを保存すると、
xfsslowerを実行しているターミナルに次のような内容が表示されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各行は、特定のしきい値よりも時間がかかったファイルシステム内の操作を表しています。
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 ページを参照してください。