跳到主要内容

iostat

iostat 是最常用的磁盘 I/O 性能观测工具,它提供了每个磁盘的使用率、IOPS、吞吐量等各种常见的性能指标,当然,这些指标实际上来自 /proc/diskstats。

# -d -x表示显示所有磁盘I/O的指标
$ iostat -d -x 1
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
loop1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

第一列的 Device 表示磁盘设备的名字。

性能指标含义提示
r/s每秒发送给磁盘的读请求数合并后的请求数
w/s每秒发送给磁盘的写请求数合并后的请求数
rkB/s每秒从磁盘读取的数据量单位为 kB
wkB/s每秒向磁盘写入的数据量单位为 kB
rrqm/s每秒合并的读请求数%rrqm表示合并读请求的百分比
wrqm/s每秒合并的写请求数%wrqm表示合并写请求的百分比
r_await读请求处理完成等待时间包括队列中的等待时间和设备实际处理的时间,单位为毫秒
w_await写请求处理完成等待时间包括队列中的等待时间和设备实际处理的时间,单位为毫秒
aqu-sz平均请求队列长度旧版本中为avgqu-sz
rareq-sz平均读请求大小单位为 kB
wareq-sz平均写请求大小单位为 kB
svctm处理 I/O 请求所需的平均时间(不包括等待时间)单位为毫秒。注意这是推断的数据,并不保证完全准确
%util磁盘处理 I/O 的时间百分比即使用率,由于可能存在并行 I/O,100% 并不一定表示磁盘 I/O 饱和
  • %util ,就是磁盘 I/O 使用率;
  • r/s+ w/s ,就是 IOPS;
  • rkB/s+wkB/s ,就是吞吐量;
  • r_await+w_await ,就是响应时间。

在观测指标时,也别忘了结合请求的大小( rareq-sz 和 wareq-sz)一起分析。

从 iostat 并不能直接得到磁盘饱和度。事实上,饱和度通常也没有其他简单的观测方法,不过,你可以把观测到的,平均请求队列长度或者读写请求完成的等待时间,跟基准测试的结果(比如通过 fio)进行对比,综合评估磁盘的饱和情况。