28.2. 使用所选 bcc-tools 进行性能调整
使用 BPF Compiler Collection (BCC)库中的某些预先创建的程序,以每个事件为基础来高效且安全地分析系统性能。BCC 库中预创建的程序集可作为创建其他程序的示例。
先决条件
- 安装 bcc-tools 软件包
- 根权限
流程
- 使用
execsnoop
检查系统进程 -
在一个终端中运行
execsnoop
程序:
/usr/share/bcc/tools/execsnoop
# /usr/share/bcc/tools/execsnoop
Copy 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 uname
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在另一个终端中,输入以下命令来打开某些文件:
uname
$ uname
Copy 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 30
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果未提供任何参数,则默认情况下输出屏幕会每 1 秒刷新一次。
在另一个终端中,输入命令来从本地硬盘设备读取内容,并将输出写到
/dev/zero
文件中:dd if=/dev/vda of=/dev/zero
# dd if=/dev/vda of=/dev/zero
Copy 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 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果未提供任何参数,
xfsslower
默认会显示比 10 ms 慢的操作。在另一个终端中,输入以下命令在
vim
编辑器中创建一个文本文件,来开始与 XFS 文件系统进行交互:vim text
$ vim text
Copy 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)
手册页。