27.2. 使用所选 bcc-tools 进行性能调整
使用 BPF Compiler Collection (BCC)库中的某些预先创建的程序,以每个事件为基础来高效且安全地分析系统性能。BCC 库中预创建的程序集可作为创建其他程序的示例。
先决条件
- 安装 bcc-tools 软件包
- 根权限
流程
- 使用
execsnoop
检查系统进程 -
在一个终端中运行
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
程序为每个消耗系统资源的新进程的打印一行输出。它甚至会检测很快运行的程序(如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)
手册页。
- 使用
opensnoop
跟踪命令打开的文件 -
在一个终端中,运行
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
列将打印与相关错误对应的值。因此,Opennoop
可以帮助您识别行为不正确的应用程序。
-
在一个终端中,运行
要查看 opensnoop
的更多详细信息、示例和选项,请参阅 /usr/share/bcc/tools/doc/opensnoop_example.txt
文件。
有关 open()
的更多信息,请参阅 open(2)
手册页。
- 使用
biotop
监控对磁盘执行 I/O 操作的排在前面的进程 -
在一个终端中使用参数
30
运行biotop
程序,来生成 30 秒概述:
# /usr/share/bcc/tools/biotop 30
注意如果未提供任何参数,则默认情况下输出屏幕会每 1 秒刷新一次。
在另一个终端中,输入命令来从本地硬盘设备读取内容,并将输出写到
/dev/zero
文件中:# dd if=/dev/vda of=/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
- 读操作达到的 Kbytes 量。(14,440,636)
- AVGms
- 读操作的平均 I/O 时间。(3.69)
有关 biotop
的详情、示例和选项,请查看 /usr/share/bcc/tools/doc/biotop_example.txt
文件。
有关 dd
的更多信息,请参阅 dd(1)
手册页。
使用 xfsslower
来公开意外使文件系统缓慢的操作
xfsslower
测量 XFS 文件系统执行读、写、打开或同步(fsync
)操作所花费的时间。1
参数可确保程序仅显示比 1 ms 较慢的操作。
在一个终端中运行
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
的详情请参考 fsync(2)
手册页。