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)进行对比,综合评估磁盘的饱和情况。