Linux 系统管理命令 - iostat - I/O 信息统计
命令详解
重要星级:
★★★★☆
功能说明:
iostat 是 I/O statistics ( 输入/输出统计 ) 的缩写,其主要功能是对系统的磁盘 I/O 操作进行监视、它的输出主要是显示磁盘读写操作的统计信息。同时也会给出 CPU 的使用情况。同 vmstat 命令一样,iostat 命令也不能对某个进程进行深入分析,仅会对系统的整体情况进行分析。
语法格式:
iostat [option] [interval [count]]
iostat [选项] [时间间隔 [次数]]
说明:
1. 在 iostat 命令及后面的选项里,每个元素之间都至少要有一个空格。
2. interval 表示两次输出之间的间隔时间。
3. count 表示按照 delay 指定的时间间隔统计的次数。
选项说明:
-c :显示 CPU 的使用情况。 ※ -d :显示磁盘的使用情况。 ※ -k :每秒以 KB 为单位显示数据。 -m :每秒以 MB 为单位显示数据。 -n :显示 NFS 的使用情况。 -t :显示每次统计的执行时间。 -p device :指定要统计的磁盘设备名称,默认为所有的磁盘设备。 -x :显示扩展统计。
使用范例:
显示所有设备的负载情况( iostat ):
[root@localhost :~]# iostat # 如果省略 "时间间隔" 和 "次数" 参数,则仅显示一次报告后就退出。 Linux 3.10.0-862.14.4.el7.x86_64 (localhost.localdomain) 2018年12月27日 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.03 0.00 0.12 0.01 0.00 99.84 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.76 11.79 2.13 133653 24137 dm-0 0.72 10.88 1.95 123336 22089 dm-1 0.01 0.20 0.00 2228 0
以下是命令结果说明:
第1-2行中各列的含义具体如下: 1. %user :用户进程消耗的 CPU 时间百分比。 2. %nice :改变过优先级的进程占用的 CPU 时间百分比。 3. %system :系统 ( 内核 ) 进程消耗的 CPU 时间百分比。 4. %iowait :IO 等待所占用的 CPU 时间百分比。 5. %steal :虚拟机强制 CPU 等待的时间百分比。 6. %idle : CPU 处在空闲状态的时间百分比。 第3-4行中各列的含义具体如下: 1. tps :表示该设备每秒的传输次数,"一次传输" 的意思是 "一次I/O请求",多个逻辑请求可能会被合并为 "一次I/O请求","一次传输" 请求的大小是未知的。 2. kB_read/s :表示每秒从设备 (drive expressed ) 读取的数据量。 3. kB_wrtn/s :表示每秒向设备 (drive expressed ) 写入的数据量。 4. kB_read :表示读取的总数据量。 5. kB_wrtn :表示写入的总数量数据量;这些单位都为 Kilobytes。
定时显示所有信息( iostat 2 3 ):
[root@localhost :~]# iostat 2 3 # 每隔两秒刷新显示一次,共显示三次。 Linux 3.10.0-862.14.4.el7.x86_64 (localhost.localdomain) 2018年12月27日 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.03 0.00 0.12 0.01 0.00 99.84 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.70 10.57 2.10 133661 26527 dm-0 0.66 9.75 1.94 123344 24479 dm-1 0.01 0.18 0.00 2228 0 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.25 0.00 0.00 99.75 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.00 0.00 0.00 0 0 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.00 0.00 100.00 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.00 0.00 0.00 0 0 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0
只显示磁盘统计信息( iostat -d ):
[root@localhost :~]# iostat -d # 选项 -d 只显示磁盘的统计信息。 Linux 3.10.0-862.14.4.el7.x86_64 (localhost.localdomain) 2018年12月27日 _x86_64_ (2 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.69 10.47 2.08 133661 26527 dm-0 0.66 9.67 1.92 123344 24479 dm-1 0.01 0.17 0.00 2228 0 [root@localhost :~]# iostat -d -k # 选项 -k 以 KB 为单位显示数据。 Linux 3.10.0-862.14.4.el7.x86_64 (localhost.localdomain) 2018年12月27日 _x86_64_ (2 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.69 10.43 2.07 133661 26527 dm-0 0.65 9.62 1.91 123344 24479 dm-1 0.01 0.17 0.00 2228 0 [root@localhost :~]# iostat -d -m # 选项 -m 以 MB 为单位显示数据。 Linux 3.10.0-862.14.4.el7.x86_64 (localhost.localdomain) 2018年12月27日 _x86_64_ (2 CPU) Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 0.68 0.01 0.00 130 25 dm-0 0.65 0.01 0.00 120 23 dm-1 0.01 0.00 0.00 2 0 [root@localhost :~]#
查看扩展信息( iostat -x ):
[root@localhost :~]# iostat -x # 选项 -x 显示扩展信息。 Linux 3.10.0-862.14.4.el7.x86_64 (localhost.localdomain) 2018年12月27日 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.03 0.00 0.12 0.01 0.00 99.84 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.03 0.38 0.29 10.25 2.05 36.33 0.00 1.26 0.83 1.83 0.49 0.03 dm-0 0.00 0.00 0.33 0.32 9.46 1.89 35.12 0.00 1.70 0.97 2.45 0.50 0.03 dm-1 0.00 0.00 0.01 0.00 0.17 0.00 47.40 0.00 0.22 0.22 0.00 0.15 0.00
以下是命令结果说明:
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了( 当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge )。 wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。 r/s :每秒发送给设备的读取请求数;The number of read requests that were issued to the device per second。 w/s :每秒发送给设备的写取请求数;The number of write requests that were issued to the device per second。 rkB/s :每秒读入的千字节数。 wkB/s :每秒写入的千字节数。 avgrq-sz :设备平均每次进行 I/O 操作的数据大小( 扇区 )。 avgqu-sz :平均 I/O 队列长度。 await :每一个 I/O 请求的处理的平均时间 ( 毫秒 )。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。 svctm :设备平均每次 I/O 操作的服务时间 ( 毫秒 )。服务时间包括:磁头寻道时间(目前平均为3毫秒)+旋转延迟时间(磁盘转速相关)+数据传输时间 ( 简单计算时可忽略不计 ) %util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的 %util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是 100% 表示设备已经接近满负荷运行了 ( 当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈 )。
说明:
1. 注意 %util 的陷阱和 svctm 数值全部都不可取
2. IOSTAT中关于%util,svctm存在的陷阱及解决办法
只查看 CPU 的统计信息:
[root@localhost :~]# iostat -c # 使用了 -c 选项只显示系统 CPU 的统计信息。 Linux 3.10.0-862.14.4.el7.x86_64 (localhost.localdomain) 2018年12月27日 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.03 0.00 0.12 0.01 0.00 99.83
参考资料: