iostat 命令 #
iostat
命令用于监控系统的输入/输出设备负载,通过观察设备的活动时间与平均传输速率。它是诊断磁盘I/O性能问题的重要工具。
语法 #
iostat [选项] [设备...] [间隔 [计数]]
常用选项 #
选项 | 描述 |
---|---|
-c |
显示CPU使用情况 |
-d |
仅显示设备报告 |
-h |
以人类可读的格式显示大小 |
-k |
以千字节为单位显示 |
-m |
以兆字节为单位显示 |
-t |
打印时间戳 |
-x |
显示扩展统计信息 |
-z |
忽略活动为零的设备 |
-p [设备] |
显示设备及其分区的统计信息 |
-j ID |
显示持久设备名称 |
-N |
显示设备映射器名称 |
-y |
忽略自系统启动以来的统计信息(仅显示间隔统计信息) |
输出字段说明 #
CPU统计信息(-c选项) #
%user
:CPU在用户级别(应用程序)执行时的时间百分比%nice
:CPU在带有nice优先级的用户级别执行时的时间百分比%system
:CPU在系统级别(内核)执行时的时间百分比%iowait
:CPU等待输入/输出完成时的时间百分比%steal
:虚拟CPU等待实际CPU时的时间百分比%idle
:CPU空闲时间百分比
设备统计信息(默认) #
tps
:每秒钟发送到设备的传输数kB_read/s
:每秒从设备读取的数据量(千字节)kB_wrtn/s
:每秒向设备写入的数据量(千字节)kB_read
:从设备读取的总数据量(千字节)kB_wrtn
:向设备写入的总数据量(千字节)
扩展统计信息(-x选项) #
r/s
:每秒完成的读取请求数w/s
:每秒完成的写入请求数rkB/s
:每秒读取的千字节数wkB/s
:每秒写入的千字节数avgrq-sz
:平均请求大小(扇区)avgqu-sz
:平均请求队列长度await
:平均I/O响应时间(毫秒)r_await
:读请求平均响应时间(毫秒)w_await
:写请求平均响应时间(毫秒)svctm
:平均服务时间(毫秒)(不再使用)%util
:设备利用率百分比
常见用法 #
1. 显示基本I/O统计信息 #
iostat
这将显示自系统启动以来的CPU和设备I/O统计信息。
2. 每隔2秒显示一次,共显示5次 #
iostat 2 5
3. 只显示设备统计信息 #
iostat -d
4. 显示扩展统计信息 #
iostat -x
5. 以兆字节为单位显示 #
iostat -m
6. 显示特定设备的统计信息 #
iostat -d /dev/sda
7. 显示分区统计信息 #
iostat -p /dev/sda
8. 显示带时间戳的统计信息 #
iostat -t 2
9. 以人类可读的格式显示 #
iostat -h
10. 忽略不活跃的设备 #
iostat -z
实用示例 #
1. 监控磁盘I/O性能 #
iostat -xz 1
这将每秒显示一次扩展的I/O统计信息,并忽略不活跃的设备。
2. 检查特定设备的I/O等待时间 #
iostat -x /dev/sda 2 10
这将每2秒显示一次/dev/sda的扩展统计信息,共显示10次。关注await
、r_await
和w_await
列,它们表示I/O请求的平均响应时间。
3. 检查设备利用率 #
watch -n 1 'iostat -xz | grep -v loop'
这将每秒更新一次显示,并过滤掉loop设备。关注%util
列,它表示设备的利用率百分比。
4. 以人类可读的格式监控磁盘吞吐量 #
iostat -dhmx 2
5. 检查所有分区的I/O活动 #
iostat -p ALL 2
6. 结合其他命令分析I/O瓶颈 #
iostat -xz 1 | awk '$1=="Device:" || $1!="loop" && $14>0'
这将只显示有I/O活动的非loop设备。
性能分析指南 #
识别I/O瓶颈 #
-
高
%util
值:接近100%表示设备饱和,可能是I/O瓶颈。 -
高
avgqu-sz
值:表示设备队列中等待的请求数量多,可能导致延迟增加。 -
高
await
值:表示I/O请求的平均响应时间长,可能是设备过载或硬件问题。 -
r_await
与w_await
的差异:如果读取等待时间明显高于写入等待时间,可能表示读取操作受到缓存不足的影响。
常见问题及解决方案 #
问题 | 可能的原因 | 潜在解决方案 |
---|---|---|
高%util 但低吞吐量 |
随机I/O或小I/O请求 | 增加缓存、优化应用程序I/O模式、使用SSD |
高await 值 |
设备过载或硬件问题 | 添加更多磁盘、使用RAID、检查硬件健康状况 |
高avgqu-sz |
并发I/O请求过多 | 调整应用程序、增加I/O调度器队列深度、添加更多磁盘 |
高%iowait |
CPU等待I/O完成 | 优化I/O操作、使用更快的存储设备、增加系统内存 |
与其他I/O监控工具的比较 #
工具 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
iostat | 简单、轻量、详细的I/O统计 | 无交互式界面、无历史数据 | 快速诊断、脚本监控 |
iotop | 按进程显示I/O使用情况 | 资源消耗较高 | 识别I/O密集型进程 |
dstat | 结合CPU、内存、I/O等统计 | 信息可能过多 | 全面系统监控 |
vmstat | 轻量级、包含内存和CPU信息 | I/O信息有限 | 快速系统概览 |
sar | 历史数据记录和分析 | 配置复杂 | 长期性能趋势分析 |
提示 #
- 第一行输出通常显示自系统启动以来的平均值,可能不反映当前状态
- 使用
-x
选项获取更详细的I/O统计信息 - 使用
-z
选项过滤掉不活跃的设备,使输出更清晰 - 关注
%util
、await
和avgqu-sz
值来识别潜在的I/O瓶颈 - 将
iostat
与vmstat
、top
等工具结合使用,全面了解系统性能 - 在虚拟化环境中,
%util
可能不准确,因为虚拟设备可能不反映实际物理设备的利用率 - 使用
-p ALL
可以查看所有分区的I/O活动,有助于识别具体的问题分区 - 在SSD设备上,传统的一些指标(如
svctm
)可能不如在HDD上那样有意义