iostat命令详解与性能监控技巧
命令
iostat是Linux系统中用于监控系统输入/输出设备负载情况的工具,属于sysstat软件包的一部分。它能够提供CPU使用情况和磁盘I/O的统计信息,是性能分析和故障排查的重要工具。
基本语法
iostat [选项] [时间间隔] [次数]
常用选项
| 选项 | 说明 |
|------|------|
| -c | 只显示CPU使用情况 |
| -d | 只显示磁盘使用情况 |
| -k | 以KB为单位显示数据 |
| -m | 以MB为单位显示数据 |
| -x | 显示扩展统计信息 |
| -p | 显示指定设备或分区的统计信息 |
| -t | 显示时间戳 |
| -h | 人性化显示数据 |
输出字段解析
CPU部分
%user
:用户级别(应用程序)的CPU使用百分比%nice
:nice优先级调整后的用户级别CPU使用百分比%system
:系统级别(内核)的CPU使用百分比%iowait
:CPU等待I/O操作完成的时间百分比%steal
:虚拟环境中的CPU被偷取时间百分比%idle
:CPU空闲时间百分比
磁盘部分
Device
:设备名称tps
:每秒传输次数(transfers per second)kB_read/s
:每秒读取的数据量(KB)kB_wrtn/s
:每秒写入的数据量(KB)kB_read
:读取的总数据量(KB)kB_wrtn
:写入的总数据量(KB)
扩展统计信息(-x选项)
rrqm/s
:每秒合并的读请求数wrqm/s
:每秒合并的写请求数r/s
:每秒完成的读I/O次数w/s
:每秒完成的写I/O次数rkB/s
:每秒读取的KB数wkB/s
:每秒写入的KB数avgrq-sz
:平均每次I/O操作的数据大小(扇区数)avgqu-sz
:平均I/O队列长度await
:平均每次I/O操作的等待时间(毫秒)r_await
:读操作的平均等待时间(毫秒)w_await
:写操作的平均等待时间(毫秒)svctm
:平均每次I/O操作的服务时间(毫秒)%util
:设备利用率百分比
实用示例
- 基本使用(间隔2秒,共5次)
iostat 2 5
- 只显示磁盘统计信息
iostat -d 1 3
- 显示扩展磁盘统计信息
iostat -x 1
- 以MB为单位显示磁盘统计信息
iostat -d -m 1
- 监控特定磁盘设备
iostat -p sda 1
- 显示CPU和磁盘统计信息,带时间戳
iostat -t 1
性能监控技巧
-
识别I/O瓶颈:
- 关注
%util
:接近100%表示设备饱和 - 观察
await
和svctm
:如果await
远大于svctm
,说明I/O队列过长 - 检查
avgqu-sz
:队列长度持续大于1可能表示I/O瓶颈
- 关注
-
读写比例分析:
- 通过
rkB/s
和wkB/s
了解读写比例 - 高写入负载可能需要优化写入策略或增加缓存
- 通过
-
CPU与I/O关系:
- 高
%iowait
表示CPU等待I/O,可能是存储瓶颈 - 结合
vmstat
和top
命令综合分析
- 高
-
长期监控:
iostat -xdt 60 > iostat.log &
每小时记录一次:
while true; do iostat -xdt 1 60 >> iostat.log; done
-
性能基准测试:
- 在应用负载前后使用iostat对比数据
- 测试不同配置下的I/O性能变化
注意事项
-
次运行iostat时显示的是系统启动以来的平均值,后续结果才是间隔时间内的统计值
-
对于SSD设备,传统的机械硬盘性能指标解释可能需要调整
-
在虚拟化环境中,
%steal
值高可能表示物理主机资源紧张 -
结合其他工具如sar、vmstat、dstat等可以获得更全面的性能视图
通过熟练使用iostat命令,系统管理员可以有效地识别和解决存储I/O相关的性能问题,优化系统配置,提高整体性能。
(牛站网络)