1. iostat 简介
iostat 是 Linux 的一个性能监控工具,属于 sysstat 包的一部分,专门用于报告 CPU 和 I/O 设备(主要是磁盘)的使用情况。它提供的信息包括 CPU 使用率、磁盘吞吐量、读写速率等。对于排查性能瓶颈,特别是与磁盘 I/O 和 CPU 使用相关的问题,iostat 是一个非常有用的工具。
2. 安装 iostat
在大部分 Linux 发行版中,iostat 是 sysstat 工具包的一部分。可以使用以下命令来安装 sysstat:
# Ubuntu/Debian
sudo apt update && sudo apt install sysstat
# CentOS/RHEL
sudo yum install sysstat
安装完 sysstat 后,可以通过 iostat -V 查看版本号并确认安装成功。
3. iostat 的基本用法
基本语法
iostat [选项] [间隔] [次数]
- 间隔:表示每次输出之间的间隔(单位为秒)。
- 次数:表示重复输出的次数。
例如,iostat 2 5 表示每 2 秒输出一次数据,总共输出 5 次。
示例
# 显示一次系统的 I/O 使用情况
iostat
# 每 1 秒输出一次,总共输出 3 次
iostat 1 3
4. 常用参数说明
iostat 提供了多个选项,用于展示不同的信息。下面列出了一些常用的参数:
参数 | 说明 |
---|---|
-c | 显示 CPU 相关统计信息 |
-d | 显示磁盘使用情况统计 |
-x | 显示详细的磁盘使用情况统计 |
-t | 显示时间戳 |
-k | 将显示的数据以 KB 为单位 |
-m | 将显示的数据以 MB 为单位 |
示例
# 显示 CPU 使用情况
iostat -c
# 显示磁盘使用情况
iostat -d
# 以 MB 为单位显示详细的磁盘使用情况
iostat -x -m
5. 输出分析
iostat 的输出分为两部分:CPU 使用情况 和 磁盘 I/O 使用情况。
5.1 CPU 使用情况
在不加参数时,iostat 默认显示 CPU 的使用情况。示例如下:
avg-cpu: %user %nice %system %iowait %steal %idle
1.24 0.00 0.15 0.05 0.00 98.56
- %user:用户态 CPU 使用率。
- %nice:经过调整优先级的用户态进程使用率。
- %system:系统内核使用率。
- %iowait:等待 I/O 操作的时间比例。数值较高时说明 I/O 有瓶颈。
- %steal:虚拟机被强制等待的 CPU 时间(虚拟化环境中)。
- %idle:CPU 空闲时间。数值越高表明 CPU 越空闲。
5.2 磁盘 I/O 使用情况
磁盘 I/O 使用情况如下所示:
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 14.55 12.33 6.70 12345 67890
- Device:设备名称(如 sda)。
- tps:每秒的传输次数,包括读和写。
- kB_read/s:每秒读取的千字节数。
- kB_wrtn/s:每秒写入的千字节数。
- kB_read:读取的总千字节数。
- kB_wrtn:写入的总千字节数。
5.3 使用 -x 查看详细磁盘统计信息
iostat -x 选项提供了详细的磁盘使用统计信息:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 1.00 5.00 2.00 60.00 20.00 16.00 0.10 3.50 2.00 4.00 0.80 0.60
- 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 命令,得到如下输出:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 1.50 8.00 4.00 100.00 30.00 20.00 1.20 5.00 3.50 6.50 1.00 90.00
分析:
- 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 可以有效提高系统的稳定性和性能。