42.2. 使用所选 bcc-tools 进行性能调整
使用 BPF Compiler Collection (BCC)库中的某些预先创建的程序来在每个事件基础上高效、安全地分析系统性能。BCC 库中预创建的程序集可作为创建其他程序的示例。
先决条件
流程
- 使用
execsnoop检查系统进程 -
在一个终端中运行
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程序为消耗系统资源的每个新进程打印一行输出。它甚至会检测很快运行的程序(如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
# /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列将打印与相关错误对应的值。因此,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
# /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 此步骤会生成特定的 I/O 流量来演示
biotop。运行
biotop的终端显示类似如下的输出:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# /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) 手册页。