一 、前言
一款Linux下的io性能监控软件,用于统计CPU使用情况和块设备I/O情况,统计时间为上次执行到目前。iostat可以给我们提供丰富的IO状态数据
二 、命令参数
iostat [选项] [<时间间隔>] [<次数>]
-c: 显示CPU使用情况
-d: 显示磁盘使用情况
-N: 显示磁盘阵列(LVM) 信息
-n: 显示NFS 使用情况
-k: 以 KB 为单位显示
-m: 以 M 为单位显示
-t: 报告每秒向终端读取和写入的字符数和CPU的信息
-V: 显示版本信息
-x: 显示详细信息
-p:[磁盘] 显示磁盘和分区的情况
三 、信息指标详解
常用命令:
iostat -x 1
#或者
iostat -x 1 10
显示详细信息,每1秒采集一次。10采集10次
$ iostat -x 1
Linux 5.4.0-77-generic (VM-20-6-ubuntu) 11/23/2021 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.23 0.01 0.23 0.02 0.00 99.51
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
scd0 0.00 0.02 0.00 0.00 0.88 35.13 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
vda 0.06 1.22 0.03 36.10 0.63 21.11 2.86 28.85 2.36 45.22 1.11 10.10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.22
avg-cpu: %user %nice %system %iowait %steal %idle
1.50 0.00 3.00 0.50 0.00 95.00
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
scd0 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 0.00 0.00 0.00 0.00 0.00
vda 1.00 4.00 0.00 0.00 1.00 4.00 7.00 56.00 7.00 50.00 0.71 8.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
系统信息:
- 内核版本、当前日期、CPU架构、CPU核数目;
CPU使用统计信息: 用户进程使用率、系统使用率、空闲率等;且以下指标加起来和为1
- %user:CPU处在用户模式下的时间百分比。
- %nice:CPU处在带NICE值的用户模式下的时间百分比。
- %system:CPU处在系统模式下的时间百分比。
- %iowait:CPU等待输入输出完成时间的百分比。如果%iowait的值过高,表示硬盘存在I/O瓶颈
- %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
- %idle:CPU空闲时间百分比。%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
块设备I/O统计信息: 每秒读写的数据量、总读写数据量等。
读指标:
- r/s: 每秒完成的读 I/O 设备次数。即 rio/s,这个大可能说明很多随机IO
- rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
- rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
- %rrqm:在发送到设备之前合并到一起的读请求的百分比。
- r_await:每个读操作平均所需的时间,重点关注,对于HDD,高于20ms可能就请求太多,导致排队了,因为正常一次寻道也就10ms。
- rareq-sz:向设备发出的读请求的平均大小(单位为 k)
写指标:
- w/s: 每秒完成的写 I/O 设备次数。即 wio/s
- wkB/s: 每秒写K字节数。是 wsect/s 的一半。
- wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
- %wrqm:在发送到设备之前合并到一起的写请求的百分比。
- w_await:平均每次写请求的时间(以毫秒为单位)。这包括请求在队列中花费的时间和执行它们所花费的时间。重点关注,对于HDD,高于20ms可能就请求太多,导致排队了,因为正常一次寻道也就10ms。
- wareq-sz:向设备发出的写请求的平均大小(单位为 k)。
抛弃指标:
- d/s:每秒设备完成的抛弃请求数(合并后)。
- dkB/s:从设备中每秒抛弃的kB数量
- drqm/s: 每秒排队到设备中的合并抛弃请求的数量
- %drqm:抛弃请求在发送到设备之前已合并在一起的百分比。
- d_await: 发出要服务的设备的抛弃请求的平均时间(以毫秒为单位)。 这包括队列中的请求所花费的时间以及为请求服务所花费的时间。
- dareq-sz: 发出给设备的抛弃请求的平均大小(以千字节为单位)。
其它指标:
- aqu-sz: 发出到设备的请求的平均队列长度。 注意:在以前的版本中,此字段称为avgqu-sz。这个指标高需要重点关注,可能IO太多,需要等待
- %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比,向设备发出I/O请求的经过时间百分比(设备的带宽利用率)。 当串行服务请求的设备的该值接近100%时,将发生设备饱和。 但是对于并行处理请求的设备(例如RAID阵列和现代SSD),此数字并不反映其性能限制。这个指标高说明IO基本上就到瓶颈了,但是低也不一定IO就不是瓶颈。一般%util大于70%,I/O压力就比较大. 同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(I/O等待所占用的CPU时间的百分比,高过30%时I/O压力高)
其它版本可能出现的指标: (系统版本不同,可能出现以下相关参数)
- avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
- avgqu-sz: 平均I/O队列长度。如果avgqu-sz比较大,也表示有当量io在等待。
- rsec/s: 每秒读扇区数。即 rsect/s
- wsec/s: 每秒写扇区数。即 wsect/s,
- r_await:每个读操作平均所需的时间,不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间。
- w_await:每个写操作平均所需的时间,不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间。
- await: 平均每次设备I/O操作的等待时间 (毫秒)。如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。
- svctm: 平均每次设备I/O操作的服务时间 (毫秒)。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间