详解iostat使用方法

使用iostat命令,通过观察物理磁盘的活动时间与其平均传输速率的关系来监视系统输入/输出设备的负载情
况,我们可以通过使用iostat所获得的信息来评估系统的负载情况,并利用这些信息来决定如何更改系统配
置,以更好地平衡硬件(主要是物理磁盘及适配器)负载。
安装iostat
如果是最小化安装的系统,需要先安装iostat才能使用
yum install -y sysstat

基本输出:
iostat Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 10/15/2018 x86_64 (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle 0.03 0.00 0.03 0.04 0.00 99.90
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.08 1.35 9.80 228717 1654664 dm-0 0.07 1.18 9.79 199690 1652576 dm-1 0.00 0.01 0.00 2228 0

第一行显示的是系统的Linux内核版本、主机名、当前日期、架构和cpu数量。
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 10/15/2018 x86_64 (2 CPU) 接下来的两行显示CPU统计数据。对于多处理器系统,CPU值是所有处理器之间的全局平均值
avg-cpu: %user %nice %system %iowait %steal %idle 0.03 0.00 0.03 0.04 0.00 99.90
第三部分是设备利用率
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.08 1.35 9.80 228717 1654664 dm-0 0.07 1.18 9.79 199690 1652576 dm-1 0.00 0.01 0.00 2228 0
CPU统计数据:
%user: 在用户级别运行所使用的CPU的百分比
%nice: nice操作所使用的CPU的百分比
%system: 在系统级别(kernel)运行所使用CPU的百分比
%iowait: CPU等待硬件I/O时所占用的CPU百分比
%steal: 虚拟机监控程序服务另一个虚拟处理器时虚拟CPU或CPU在非自愿等待中花费的时间百分比
%idle: CPU空闲时间的百分比
设备利用率:
tps: 每秒钟发送到的I/O请求数
kB_read/s: 每秒读取的block数
kB_wrtn/s: 每秒写入的block数
kB_read: 读取的block总数
kB_wrtn: 写入的block总数
常用参数:
-c 显示CPU利用率报告
-d 显示设备利用率报告(主要指磁盘)
-m 以兆字节每秒为单位显示统计信息(MB/s)
-k 以千字节每秒为单位显示统计信息(KB/s)(默认输出单位)
-x 显示扩展的统计信息
示例1:
查看TPS和吞吐量信息(磁盘读写速度单位为KB),每间隔2秒刷新一次,共刷新5次。如果不指定刷新的次数,
则会按间隔时间一直刷新,直到手动停止。使用连续的刷新能够根据统计数据的变化情况得出系统IO负载中
的趋势
注意:tps的I/O数是指"一次传输"的次数,"一次传输"是指"一次I/O请求"。由于多个逻辑请求可能会被合
并为"一次I/O请求"。所以"一次传输"请求的大小是变化的,具体的大小在这里是看不到的。
iostat -d -k 2 5 Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 10/15/2018 x86_64 (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.08 1.31 14.66 228717 2565850 dm-0 0.08 1.14 15.04 199690 2630834 dm-1 0.00 0.01 0.00 2228 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 360.00 0.00 184320.00 0 368640 dm-0 368.00 0.00 188416.00 0 376832 dm-1 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 350.50 0.00 179200.00 0 358400 dm-0 352.00 0.00 179968.00 0 359936 dm-1 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 314.00 0.00 160513.25 0 321026 dm-0 239.00 0.00 122113.25 0 244226 dm-1 0.00 0.00 0.00 0 0
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
示例2:
使用-x选项显示与io相关的扩展数据
rrqm/s:每秒有读取请求被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge) wrqm/s:每秒这个设备相关的写入请求有多少被Merge了 r/s:每秒读取的扇区数 w/s:每秒写入的扇区数
rkB/s:每秒发送到设备的读请求数
avgrq-sz: 平均请求扇区的大小 avgqu-sz: 平均请求队列的长度,队列长度越短越好
await: 可以理解为IO的响应时间,每一个IO请求的平均处理时间,单位毫秒,包括队列时间和服务时间。
r_await: 每一个IO读请求的平均处理时间,单位毫秒
w_await: 每一个IO写请求的平均处理时间,单位毫秒
svctm: 每次设备I/O操作的平均服务时间,单位毫秒,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢
%util: 在统计时间内所有处理IO时间除以总共统计时间。例如,如果统计间隔2秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/2 = 40%,该参数显示了设备的繁忙程度。如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

iostat -d -x -k 2 3 Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 10/15/2018 x86_64 (2 CPU)
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.00 0.04 0.08 1.30 31.54 556.95 0.15 1295.79 3.85 1854.53 11.33 0.13 dm-0 0.00 0.00 0.02 0.09 1.14 31.95 606.49 0.16 1412.32 5.66 1785.84 12.22 0.13 dm-1 0.00 0.00 0.00 0.00 0.01 0.00 47.40 0.00 0.38 0.38 0.00 0.35 0.00
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.00 0.00 38.00 0.00 19456.00 1024.00 139.94 3762.82 0.00 3762.82 26.32 100.00 dm-0 0.00 0.00 0.00 32.00 0.00 16384.00 1024.00 140.93 4495.38 0.00 4495.38 31.25 100.00 dm-1 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: 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.00 0.00 38.00 0.00 19456.00 1024.00 142.92 3879.29 0.00 3879.29 26.32 100.00 dm-0 0.00 0.00 0.00 32.00 0.00 16384.00 1024.00 143.91 4606.69 0.00 4606.69 31.25 100.00 dm-1 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
示例3:
指定查看sda的TPS和吞吐量信息(磁盘读写速度单位为MB),每间隔2秒刷新一次
iostat -d -m 2 |grep sda
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 0.19 0.00 0.07 230 12004 sda 368.00 0.00 184.00 0 368 sda 373.00 0.00 186.25 0 372 sda 351.00 0.00 175.50 0 351 sda 345.50 0.00 172.75 0 345 sda 362.50 0.00 181.00 0 362 sda 375.00 0.00 187.39 0 374 sda 369.00 0.00 184.36 0 368 sda 364.00 0.00 181.75 0 363 sda 136.00 0.00 68.00 0 136
iostat输出的数据来源
从左到右依次为:
主设备号、从设备号、设备名、(rd_ios)、(rd_merges)、rd_sectors、rd_ticks、wr_ios、wr_merges、wr_sectors、wr_ticks、in_flight、io_ticks、time_in_queue

(rd_ios) : 读操作的次数 (rd_merges):合并读操作的次数 (rd_sectors): 读取的扇区数量 (rd_ticks):读操作消耗的时间(以毫秒为单位)。每个读操作从__make_request()开始计时,到end_that_request_last()为止,包括了在队列中等待的时间。 (wr_ios):写操作的次数 (wr_merges):合并写操作的次数 (wr_sectors): 写入的扇区数量 (wr_ticks): 写操作消耗的时间(以毫秒为单位) (in_flight): 当前未完成的I/O数量。在I/O请求进入队列时该值加1,在I/O结束时该值减1。 注意:是I/O请求进入队列时,而不是提交给硬盘设备时 (io_ticks)该设备用于处理I/O的自然时间(wall-clock time) (time_in_queue): 对字段#10(io_ticks)的加权值

cat /proc/diskstats 8 0 sda 6600 1 474898 28994 34352 570 31329295 49767986 0 397788 49796884 8 1 sda1 1972 0 48773 1060 16 0 4177 271 0 984 1329 8 2 sda2 4598 1 424029 27919 34336 570 31325118 49767715 0 397313 49795540 11 0 sr0 0 0 0 0 0 0 0 0 0 0 0 253 0 dm-0 4364 0 416845 27670 34906 0 31325118 50144595 0 397259 50172401 253 1 dm-1 94 0 4456 36 0 0 0 0 0 33 36

发表评论