8.2. 监控和诊断性能问题
红帽企业 Linux 7 提供了很多工具,这些工具可用于监控系统性能以及诊断与 I/O 和文件系统及其配置相关的性能问题。本节概述了可用的工具,并提供了如何使用它们监控和诊断 I/O 和文件系统相关性能问题的示例。
8.2.1. 使用 vmstat 监控系统性能
vmstat 报告整个系统中进程、内存、分页、块 I/O、中断和 CPU 活动。它可以帮助管理员确定 I/O 子系统是否负责处理任何性能问题。
与 I/O 性能最相关的信息如下:
- si
- 在 KB 中交换或读取交换空间.
- 因此
- KB 交换或写入交换空间.
- bi
- 在 KB 中阻止或阻止写入操作.
- bo
- 在 KB 中阻止或阻止读取操作.
- wa
- 等待 I/O 操作完成的队列部分。
当您的交换空间和数据位于同一个设备上以及作为内存使用情况指示器时,交换和交换出特别有用。
此外,free、buff 和 cache 列可以帮助识别回写频率。缓存值的突然下降以及可用值的增加表示已启动回写和页面缓存无效。
如果使用 vmstat 进行分析显示 I/O 子系统负责降低性能,管理员可以使用 iostat 来确定负责的 I/O 设备。
vmstat 由 procps-ng 软件包提供。有关使用 vmstat 的详情,请查看 man page:
$ man vmstat
8.2.2. 使用 iostat 监控 I/O 性能
iostat 由 sysstat 软件包提供。它报告您系统中的 I/O 设备负载。如果使用 vmstat 进行分析显示 I/O 子系统负责降低性能,您可以使用 iostat 确定负责的 I/O 设备。
您可以使用 iostat man page 中定义的参数将 iostat 报告输出到特定设备:
$ man iostat
8.2.2.1. 使用 blktrace 的详细 I/O 分析
blktrace 提供有关在 I/O 子系统中如何使用时间的详细信息。companion 工具 blkparse 读取来自 blktrace 的原始输出,并生成由 blktrace 记录的输入和输出操作的人类可读摘要。
有关这个工具的详情,请查看 blktrace(8) 和 blkparse(1) man page:
$ man blktrace
$ man blkparse
8.2.2.2. 使用 btt 分析 blktrace 输出
btt 工具作为 blktrace 软件包的一部分提供。它分析 blktrace 输出并显示 I/O 堆栈各个区域所花费的时间,从而更轻松地发现 I/O 子系统中的瓶颈。
由
blktrace
机制跟踪并由 btt 分析的一些重要事件有:
- I/O 事件队列(
Q
) - I/O 的发送到驱动程序事件(
D
) - 完成 I/O 事件(
C
)
您可以通过检查事件组合来包含或排除与 I/O 性能问题相关的因素。
要检查每个 I/O 设备的子端口时间,请查看捕获的
blktrace
事件之间的时间。例如,以下命令报告了内核 I/O 堆栈较低部分所花费的总时间(Q2C
),其中包括调度程序、驱动程序和硬件层,平均在等待时间下:
$
iostat -x
[...]
Device: await r_await w_await
vda 16.75 0.97 162.05
dm-0 30.18 1.13 223.45
dm-1 0.14 0.14 0.00
[...]
如果设备需要很长时间才能服务请求(
D2C
),设备可能会超载,或者发送到该设备的工作负载可能是子优化。如果在分配给存储设备之前,块 I/O 排队了很长时间(Q2G
),这可能表示正在使用的存储无法为 I/O 负载提供服务。例如,达到 LUN 队列完全条件,并阻止 I/O 分配给存储设备。
查看相邻 I/O 之间的时间可以让大家了解某些类型的瓶颈情况。例如,如果 btt 显示发送到块层(
Q2Q
)的请求之间的时间大于块层中消耗的请求总数(Q2C
),这表明 I/O 请求和 I/O 子系统之间有空闲时间可能不负责性能问题。
比较相邻 I/O 的
Q2C
值可显示存储服务时间的可变性量。值可以是:
- 非常符合一个小范围,或者
- 分发范围中高度可变,这表示可能存在存储设备侧拥塞问题。
有关这个工具的详情,请查看 btt(1) man page:
$
man btt
8.2.2.3. 使用 iowatcher 分析 blktrace 输出
iowatcher 工具可以使用 blktrace 输出来随着时间的推移图形 I/O。它侧重于磁盘 I/O 的逻辑块地址(LBA)、每秒吞吐量(以 MB 为单位)、每秒请求数和 I/O 操作数。这有助于识别何时达到设备的操作数秒限制。
有关这个工具的详情请参考 iowatcher(1) man page。
8.2.3. 使用 SystemTap 进行存储监控
以下 SystemTap 示例脚本与存储性能相关,在诊断存储或文件系统性能问题时可能很有用。默认情况下,它们安装到
/usr/share/doc/systemtap-client/examples/io
目录中。
disktop.stp
- 检查每 5 秒读取/写入磁盘的状态,并输出该期间内前十个条目。
iotime.stp
- 打印读取和写入操作所需的时间,以及读取和写入的字节数。
traceio.stp
- 根据观察到的累积 I/O 流量(每秒)打印前十个可执行文件。
traceio2.stp
- 在发生对指定设备的读取和写入时,打印可执行名称和进程标识符。
inodewatch.stp
- 每次对指定主/次设备上的指定索引节点发生读取和写入时,打印可执行名称和进程标识符。
inodewatch2.stp
- 每次在指定主/次设备上的指定索引节点上更改属性时,打印可执行名称、进程标识符和属性。