Menu Close
Settings Close

Language and Page Formatting Options

35.3. 使用所选 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 - 读操作达到的 K 字节。(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) 手册页。