iostat命令

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次。关注awaitr_awaitw_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瓶颈 #

  1. %util:接近100%表示设备饱和,可能是I/O瓶颈。

  2. avgqu-sz:表示设备队列中等待的请求数量多,可能导致延迟增加。

  3. await:表示I/O请求的平均响应时间长,可能是设备过载或硬件问题。

  4. r_awaitw_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选项过滤掉不活跃的设备,使输出更清晰
  • 关注%utilawaitavgqu-sz值来识别潜在的I/O瓶颈
  • iostatvmstattop等工具结合使用,全面了解系统性能
  • 在虚拟化环境中,%util可能不准确,因为虚拟设备可能不反映实际物理设备的利用率
  • 使用-p ALL可以查看所有分区的I/O活动,有助于识别具体的问题分区
  • 在SSD设备上,传统的一些指标(如svctm)可能不如在HDD上那样有意义