1. iostat 简介

iostat 是 Linux 的一个性能监控工具,属于 sysstat 包的一部分,专门用于报告 CPU 和 I/O 设备(主要是磁盘)的使用情况。它提供的信息包括 CPU 使用率、磁盘吞吐量、读写速率等。对于排查性能瓶颈,特别是与磁盘 I/O 和 CPU 使用相关的问题,iostat 是一个非常有用的工具。

2. 安装 iostat

在大部分 Linux 发行版中,iostat 是 sysstat 工具包的一部分。可以使用以下命令来安装 sysstat:

安装完 sysstat 后,可以通过 iostat -V 查看版本号并确认安装成功。

3. iostat 的基本用法

基本语法

  • 间隔:表示每次输出之间的间隔(单位为秒)。
  • 次数:表示重复输出的次数。

例如,iostat 2 5 表示每 2 秒输出一次数据,总共输出 5 次。

示例

4. 常用参数说明

iostat 提供了多个选项,用于展示不同的信息。下面列出了一些常用的参数:

参数说明
-c显示 CPU 相关统计信息
-d显示磁盘使用情况统计
-x显示详细的磁盘使用情况统计
-t显示时间戳
-k将显示的数据以 KB 为单位
-m将显示的数据以 MB 为单位

示例

5. 输出分析

iostat 的输出分为两部分:CPU 使用情况磁盘 I/O 使用情况

5.1 CPU 使用情况

在不加参数时,iostat 默认显示 CPU 的使用情况。示例如下:

  • %user:用户态 CPU 使用率。
  • %nice:经过调整优先级的用户态进程使用率。
  • %system:系统内核使用率。
  • %iowait:等待 I/O 操作的时间比例。数值较高时说明 I/O 有瓶颈
  • %steal:虚拟机被强制等待的 CPU 时间(虚拟化环境中)。
  • %idle:CPU 空闲时间。数值越高表明 CPU 越空闲。

5.2 磁盘 I/O 使用情况

磁盘 I/O 使用情况如下所示:

  • Device:设备名称(如 sda)。
  • tps:每秒的传输次数,包括读和写。
  • kB_read/s:每秒读取的千字节数。
  • kB_wrtn/s:每秒写入的千字节数。
  • kB_read:读取的总千字节数。
  • kB_wrtn:写入的总千字节数。

5.3 使用 -x 查看详细磁盘统计信息

iostat -x 选项提供了详细的磁盘使用统计信息:

  • rrqm/s, wrqm/s:每秒合并的读写请求数。高值表示大量的 I/O 合并。
  • r/s, w/s:每秒的读写请求数。
  • rkB/s, wkB/s:每秒的读写 KB 数。
  • avgrq-sz:请求的平均大小(块)。
  • avgqu-sz:I/O 请求的平均队列长度。
  • await:I/O 请求的平均等待时间(毫秒)。
  • r_await, w_await:读和写请求的平均等待时间。
  • svctm:I/O 请求的平均服务时间。
  • %util:设备忙碌的时间百分比。如果该值接近 100%,说明磁盘可能存在 I/O 瓶颈

6. 实战:定位磁盘瓶颈

以下是一个实战案例,展示如何使用 iostat 定位系统的 I/O 瓶颈:

假设执行 iostat -x 1 5 命令,得到如下输出:

分析:

  • await 为 5.00 ms,相对较高,表示 I/O 请求的平均等待时间不低。
  • avgqu-sz 为 1.20,表明 I/O 请求队列中有一定积压。
  • %util 为 90.00%,表示磁盘设备在 90% 的时间内都处于忙碌状态。

在这种情况下,系统的 I/O 负载较高,可能是瓶颈之一。如果 %util 持续接近 100%,可以考虑优化磁盘 I/O,比如更换更快的硬盘,或者调整系统 I/O 调度策略。

7. iostat 在性能优化中的作用

7.1 分析 CPU 使用情况

通过 iostat -c 了解系统的 CPU 使用情况,观察 %iowait 值。如果该值较高,说明 CPU 在等待 I/O 完成,这可能是磁盘 I/O 瓶颈

7.2 优化磁盘性能

通过 iostat -x 观察 await、avgqu-sz、%util 等值,识别 I/O 密集型负载情况。特别是:

  • 如果 await 时间较高,说明磁盘 I/O 操作的延迟较大,可能需要优化应用的 I/O 调用频率或增加缓存。
  • 如果 avgqu-sz 较大,表明 I/O 请求积压较多,可以考虑提升存储设备性能或分散 I/O 负载。

8. 总结

iostat 是一个强大的性能监控工具,尤其适用于磁盘和 CPU 使用情况的监控。通过掌握 iostat 的各种参数和输出含义,可以深入了解系统的 CPU 和 I/O 性能瓶颈,为优化系统性能提供数据支撑。在日常运维中,合理地使用 iostat 可以有效提高系统的稳定性和性能。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注