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


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

先决条件

流程

使用 execsnoop 检查系统进程
  1. 在一个终端中运行 execsnoop 程序:
# /usr/share/bcc/tools/execsnoop
  1. 要创建 ls 命令的短期进程,请在另一个终端中输入:

    $ ls /usr/share/bcc/tools/doc/
  2. 运行 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 程序,来打印仅由 uname 命令的进程打开的文件的输出:
# /usr/share/bcc/tools/opensnoop -n uname
  1. 在另一个终端中,输入以下命令来打开某些文件:

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

使用 biotop 监控对磁盘执行 I/O 操作的排在前面的进程
  1. 在一个终端中使用参数 30 运行 biotop 程序,来生成 30 秒概述:
# /usr/share/bcc/tools/biotop 30
注意

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

  1. 在另一个终端中,输入命令来从本地硬盘设备读取内容,并将输出写到 /dev/zero 文件中:

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

    此步骤会生成特定的 I/O 流量来演示 biotop

  2. 运行 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 较慢的操作。

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

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

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

  2. 在另一个终端中,输入以下命令在 vim 编辑器中创建一个文本文件,来开始与 XFS 文件系统进行交互:

    $ vim text
  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) 手册页。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.