17.2. 使用所选 bcc-tools 进行性能调整
使用 BPF Compiler Collection (BCC)库中的某些预先创建的程序,以每个事件为基础来高效且安全地分析系统性能。BCC 库中预创建的程序集可作为创建其他程序的示例。
先决条件
- 安装 bcc-tools 软件包
- 根权限
使用 execsnoop 检查系统进程
在一个终端中运行
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 - 使用参数启动的程序的位置。
-
PCOMM - 父进程名称。(
要查看 execsnoop
的详情、示例和选项,请参阅 /usr/share/bcc/tools/doc/execsnoop_example.txt
文件。
有关 exec()
的详情,请查看 exec(3)
手册页。
使用 opensnoop 跟踪命令打开的文件
在一个终端中运行
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
可以帮助您识别行为不正确的应用程序。
-
PID - 进程 ID。(
要查看 opensnoop
的更多详细信息、示例和选项,请参阅 /usr/share/bcc/tools/doc/opensnoop_example.txt
文件。
有关 open()
的更多信息,请参阅 open(2)
手册页。
使用技术检查磁盘上的 I/O 操作
在一个终端中运行
biotop
程序:# /usr/share/bcc/tools/biotop 30
该命令可让您监控在磁盘中执行 I/O 操作的主要进程。参数确保命令生成 30 秒概述。
注意如果未提供任何参数,则默认情况下输出屏幕会每 1 秒刷新一次。
在另一个终端输入中,例如:
# dd if=/dev/vda of=/dev/zero
以上命令从本地硬盘设备读取内容,并将输出写入
/dev/zero
文件。此步骤会生成特定的 I/O 流量来演示biotop
。运行
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 - 读操作达到的 K 字节。(14,440,636)
- AVGms - 读操作的平均 I/O 时间。(3.69)
-
PID - 进程 ID。(
要查看 biotop
的详情、示例和选项,请参阅 /usr/share/bcc/tools/doc/biotop_example.txt
文件。
有关 dd
的更多信息,请参阅 dd(1)
手册页。
使用 xfsslower 来公开意料外的慢文件系统操作
在一个终端中运行
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 - 被读取、写入或者同步的文件。
-
COMM - 进程名称。(
要查看 xfsslower
的详情、示例和选项,请参阅 /usr/share/bcc/tools/doc/xfsslower_example.txt
文件。
有关 fsync
的详情请参考 fsync(2)
手册页。