24.2. 使用所选 bcc-tools 进行性能调整

使用 BPF Compiler Collection (BCC)库中的某些预先创建的程序,以每个事件为基础来高效且安全地分析系统性能。BCC 库中预创建的程序集可作为创建其他程序的示例。

先决条件

使用 execsnoop 检查系统进程

  1. 在一个终端中运行 execsnoop 程序:

    # /usr/share/bcc/tools/execsnoop
  2. 在另一个终端中运行,例如:

    $ ls /usr/share/bcc/tools/doc/

    以上可创建 ls 命令的短时间进程。

  3. 运行 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 跟踪命令打开的文件

  1. 在一个终端中运行 opensnoop 程序:

    # /usr/share/bcc/tools/opensnoop -n uname

    以上列出了文件的输出,这些文件仅由 uname 命令的进程打开。

  2. 在另一个终端中,输入:

    $ uname

    以上命令会打开某些在下一步中捕获的文件。

  3. 运行 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 列返回 -1ERR 列将打印与相关错误对应的值。因此,Opennoop 可以帮助您识别行为不正确的应用程序。

要查看 opensnoop 的更多详细信息、示例和选项,请参阅 /usr/share/bcc/tools/doc/opensnoop_example.txt 文件。

有关 open() 的更多信息,请参阅 open(2) 手册页。

使用技术检查磁盘上的 I/O 操作

  1. 在一个终端中运行 biotop 程序:

    # /usr/share/bcc/tools/biotop 30

    该命令可让您监控在磁盘中执行 I/O 操作的主要进程。参数确保命令生成 30 秒概述。

    注意

    如果未提供任何参数,则默认情况下输出屏幕会每 1 秒刷新一次。

  2. 在另一个终端输入中,例如:

    # dd if=/dev/vda of=/dev/zero

    以上命令从本地硬盘设备读取内容,并将输出写入 /dev/zero 文件。此步骤会生成特定的 I/O 流量来演示 biotop

  3. 运行 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 来公开意料外的慢文件系统操作

  1. 在一个终端中运行 xfsslower 程序:

    # /usr/share/bcc/tools/xfsslower 1

    以上命令测量 XFS 文件系统执行读取、写入、打开或同步 (fsync) 操作的时间。1 参数可确保程序仅显示比 1 ms 较慢的操作。

    注意

    如果未提供任何参数,xfsslower 默认会显示比 10 ms 慢的操作。

  2. 在另一个终端输入中,例如:

    $ vim text

    以上命令在 vim 编辑器中创建了一个文本文件,用于启动与 XFS 文件系统的某些互动。

  3. 运行 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) 手册页。