5.2. 性能问题监控和诊断

红帽企业版 Linux 7 提供一些工具,这些工具有助于监控系统性能和诊断与 I/O、文件系统及其配置相关性能问题。此章节概述可用的工具,并列举如何使用这些工具监控和诊断与 I/O 及文件系统相关的性能问题的例子。

5.2.1. 使用 vmstat 监控系统性能

Vmstat 报告整个系统的进程、内存、分页、阻止 I/O、中断和 CPU 活动。它能帮助管理员决定 I/O 子系统是否对任何性能问题负责。
下列是与 I/O 性能最相关的信息:
si
切换进硬盘,或者以 KB 为单位写入交换空间。
so
从硬盘中切换出,或者以 kb 为单位从交换空间读取。
bi
写入块,或者以 kb 为单位阻止写操作。
bo
读取块,或者以 kb 为单位阻止读操作。
wa
等待 I/O 操作完成的队列部分。
交换空间和数据在同一设备上时,而且是内存使用指示器,切换进硬盘和从硬盘中切换出尤为有用。
另外,空闲、缓存和缓存列能帮助识别回写频率。缓存值突然下降和空闲值的增加表明回写和页面缓存无效。
如果使用 vmstat 的分析显示 I/O 子系统对性能下降负责,管理员可用 iostat 确定承担责任的 I/O 设备。
vmstat 由软件包 procps-ng 提供。更多使用 vmstat 的信息,请参见手册页:
$ man vmstat

5.2.2. 使用 iostat 监控 I/O 性能

Iostat 是由 sysstat 软件包提供的。它报告加载在您系统中的 I/O 设备。如果使用 vmstat 的分析显示 I/O 子系统对性能下降负责,您可以使用 iostat 来确定负责的 I/O 设备。
您可以使用 iostat 手册页中定义的参数,将 iostat 报告的输出集中在特定设备上。
$ man iostat

5.2.2.1. 使用 blktrace 详细说明 I/O 分析

Blktrace 提供 I/O 子系统上时间如何消耗的详细信息。配套工具 blkparseblktrace 读取原始输出,并产生人们可读的输入和输出操作摘要,该摘要由 blktrace 记录。
更多此工具的细节请参见手册页:
$ man blktrace
$ man blkparse

5.2.2.2. 用 btt 分析 blktrace 输出

Btt 作为 blktrace 软件包的一部分而被提供。它分析 blktrace 输出,并显示该数据用在每个 I/O 栈区域的时间量,使它更容易在 I/O 子系统中发现瓶颈。
例如,如果 btt 显示发送至块层(Q2Q)的请求之间的时间比用于块层(Q2C)的请求之间的总时间长,那么 I/O 子系统可能不对性能问题负责。如果设备花了很长时间处理请求(D2C),该设备可能超载,或者发送给该设备的工作负载可能不是最佳的。如果块 I/O 队列等待很长时间,请求(Q2G)才分配给块 I/O 队列,这可能表明正在使用的存储不能够为 I/O 负载提供服务。
更多此工具的细节请参见手册页:
$ man btt

5.2.2.3. 使用 seekwatcher 分析 blktrace 输出

seekwatcher 工具可使用 blktrace 输出随时间绘制 I/O 图表。它集中在硬盘 I/O 的 LBA(逻辑块地址)、每秒以兆计算的吞吐量、每秒搜寻的数量和每秒 I/O 操作。这能帮助您了解何时达到设备操作系统每秒的限制。
更多此工具的细节请参见手册页:
$ man seekwatcher

5.2.3. 使用 SystemTap 监控存储

红帽企业版 Linux 7 SystemTap 入门指南》 包含几个有助于配置和监控存储性能的示例脚本。
下列的 SystemTap 示例脚本与存储性能有关,并可能有助于诊断存储或文件系统性能问题。默认设置下,安装它们至 /usr/share/doc/systemtap-client/examples/io 目录下。
disktop.stp
每 5 秒检查读/写硬盘状态并输出在此期间的前十项。
iotime.stp
显示用在读操作和写操作的时间量,以及读和写的字节量。
traceio.stp
根据观察到的累计 I/O 流,显示每秒前十项可执行文件。
traceio2.stp
在特定设备进行读和写操作时,显示可执行的名称和进程标识符。
inodewatch.stp
每当在特定主要/次要设备上的特定 inode 上进行读或者写操作时,显示可执行的名称和进程标识符。
inodewatch2.stp
每当在特定主要/次要设备上的特定 inode 上属性发生变化时,显示将可执行的名称、进程标识符、和属性。
红帽企业版 Linux 7 SystemTap 入门指南》可在网站中查找 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/