2018年3月17日星期六

iostat用法详解


iostatCPU以及IO设备/分区信息统计(注意,不是文件系统)的工具,非常常用,可以查看cpu使用情况以及IO设备当前繁忙情况。本文介绍常用方法,以及指标解读。

.用法

iostat [options] [interval [ count ]
interval表示汇报内容的间隔,count表示汇报次数。如果指定了interval不指定count,则无限次输出
  • -c 显示CPU报告
  • -d 显示Disk报告
  • -k 使用KB代替(512B)块数目
  • -m 使用MB代替(512B)块数目
  • -p 包括分区的统计信息。不带则只显示device
  • -t 时间戳输出
  • -x 显示扩展信息
  • -z 忽略无活动的设备
  • -h 格式化,使得更易读
  • -N 显示已注册的设备mapper名,例如使用了lvm2的时候的输出

以下示例基于RedHat 7.2
#iostat -V
sysstat version 10.1.5
(C) Sebastien Godard (sysstat <at> orange.fr)



示例1. 不带任何参数的情况下,等价于-c -d的输出,报告一次。
#iostat
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.91    0.03    9.35    0.04    0.00   83.68
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              46.45         1.18       377.06   23703208 7562466988
sdb             194.31        59.31      1485.02 1189502933 29784421688
注意:只输出一次,秒级数据是不准确的,需要看非首次的输出数据。

示例2.每秒输出一次,一共3次,带扩展信息,MB字节形式输出,只输出设备
#iostat -mtxdNz 1 3  03/17/2018 04:49:45 PM
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     3.84    0.01    9.03     0.00     0.10    21.58     0.02    2.23    0.37    2.24   0.04   0.04
dfa               0.00     0.00  520.72 3217.33    10.35    26.91    20.41     0.16    0.04    0.12    0.03   0.02   7.96
dfb               0.00     0.00  520.66 3222.26    10.35    27.31    20.60     0.16    0.04    0.12    0.03   0.02   8.00
dfc               0.00     0.00  520.67 3210.88    10.35    26.75    20.36     0.16    0.04    0.12    0.03   0.02   8.00
vgdata-volume1     0.00     0.00 1549.38 4221.35    30.48    61.51    32.65     0.37    0.06    0.12    0.04   0.03  15.54
vgdata-volume2     0.00     0.00   12.67 5429.11     0.56    22.66     8.74     0.14    0.03    0.16    0.03   0.01   3.90
03/17/2018 04:49:46 PM
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    4.00     0.00     0.02     8.00     0.00    0.00    0.00    0.00   0.00   0.00
dfa               0.00     0.00  877.00 4332.00    70.58    33.98    41.11     0.42    0.08    0.26    0.05   0.04  18.40
dfb               0.00     0.00  796.00 4515.00    69.86    35.11    40.48     0.36    0.07    0.31    0.03   0.04  19.40
dfc               0.00     0.00  818.00 4340.00    70.86    34.79    41.95     0.35    0.07    0.25    0.03   0.03  16.00
vgdata-volume1     0.00     0.00 2491.00 5096.00   211.30    71.54    76.35     0.96    0.13    0.27    0.05   0.04  27.60
vgdata-volume2     0.00     0.00    0.00 8091.00     0.00    32.34     8.18     0.20    0.02    0.00    0.02   0.01   6.30
03/17/2018 04:49:47 PM
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    16.00    0.00    2.00     0.00     0.07    72.00     0.00    0.50    0.00    0.50   0.50   0.10
dfa               0.00     0.00  926.00 3902.00    78.07    35.89    48.34     0.49    0.10    0.31    0.05   0.05  22.70
dfb               0.00     0.00  857.00 3938.00    76.68    35.64    47.97     0.34    0.07    0.28    0.03   0.04  18.70
dfc               0.00     0.00  862.00 4145.00    77.71    35.78    46.42     0.45    0.09    0.31    0.04   0.04  21.10
vgdata-volume1     0.00     0.00 2645.00 5316.00   232.46    80.64    80.55     1.12    0.14    0.31    0.06   0.04  30.70
vgdata-volume2     0.00     0.00    0.00 6669.00     0.00    26.67     8.19     0.20    0.03    0.00    0.03   0.01   7.00

CPU使用率指标

指标
含义
备注
%user
用户态(非系统内核层)运行的CPU使用占比

%nice
指定了nice优先级的CPU使用占比

%system
系统内核层的CPU使用占比

%iowait
处理等待IO操作的CPU使用占比
Linux 2.5.41以后就不再包含idle
%steal
虚拟环境下,因管理hypervisor
服务其他核心而导致自己被迫等待的CPU占比

%idle
CPU空闲时间占比
Linux 2.5.41以后就不再包含iowait

设备使用指标

指标(红色表示重要指标)
含义
备注
Devices
/dev目录下的设备或者分区的名字

tps
每秒发送给设备的I/O请求数量(合并请求之后),即IOPS
等于-x下的r/s+w/s
Blk/kB/MB_read/s(Blk/kB/MB_wrtn/s)
开机启动以来累计的读(写)字节数,单位为块(512B)或KB或者MB

Blk/kB/MB_read(Blk/kB/MB_wrtn)
开机启动以来累计的读(写)字节数,单位为块(512B)或KB或者MB
只有命令的首个report有效,指定间隔打印下后续report就不再是累计值了。
rrqm/s(wrqm/s)
每秒进入队列的读(写)合并请求(read requests merged)数量
表示对顺序读写的数据的请求,进行合并优化,这样对设备发起的请求量可以减少
r/s(w/s)
每秒完成的读(写)请求(合并之后的)数量
1)真实提交给设备的请求量.
2)读操作一般是同步的,而写入可能是异步的,还是因为写入一般有写缓存,可以快速返回。
3)可以看到,rrqm + rs就是读操作的总数,wrqm + ws为写操作的总数
rsec/s,rkB/s,rMB/s(wsec/s,wkB/s,wMB/s)
每秒读(写)的字节数,单位为扇区(512B)或者KB或者MB

avgrq-sz
真实提交(即表示合并后的,下同)给设备的请求的平均大小,单位是扇区(512B)数量
该值/2就是平均每个请求的kB数,更直观一点。
16以下的基本表示不能合并的随机IO,而大的值表示大IO,或者合并IO(可以根据rrpm/s或者wrqm/s指标看出来)
avgqu-sz
真实提交给设备的请求的平均队列长度
1)等在设备驱动队列的请求+设备中正在处理的。
2)这个值如果很小但是应用有IO问题,则可以考虑优化应用IO了,比如:更多预读,减少fsync等。
3)这个值如果很大,说明繁忙
await
平均io响应时间,针对已经处理的io请求,单位ms
队列中等待时间+真实处理时间
r_await(w_await)
平均读(写)io响应时间
队列中等待时间+真实处理时间。
注意:读操作看r_await比较准确,但是写操作往往有写缓存,会立即返回。
svctm
已废弃,不可信,未来会移除掉!意在表示设备的平均真实处理时间。

%util
设备忙于处理IO的时间比例。
特别注意: 本指标反映出一定意义的盘饱和度,但不是完全准确,原因是表示该设备有I/O(即非空闲)的时间比率,不考虑I/O有多少,由于现代硬盘设备都有并行处理多个I/O请求的能力,所以%util即使达到100%也不意味着设备饱和了

补充1:

rrqm/swrqm/s指标是与Linux IO调度算法有关。为提升磁盘读写性能,通过合并和排序IO请求队列中的请求来大大降低所需的磁盘寻道时间,从而提供整体IO性能。而能合并的请求,肯定是访问同一个扇区的,往往是顺序读才会有这样的情况。
Linux2.6内核提供IO调度算法有四种:分别为预期(Anticipatory)算法、最后期限(Deadline)算法、完全公平对列(CFQ)算法以及NOOP算法(No Operation)。调度算法相关后续再撰文分析,本文不赘述

补充2:

针对%util,进一步解释一下:
根据iostat的源码, %util等于如下值计算
busy = 100.0 * blkio.ticks / deltams; /* percentage! */
if (busy > 100.0) busy = 100.0;
只要弄清楚blkio.ticksdeltams,就可以明确%util的含义了。
  • blkio.ticks信息取自 /proc/diskstats,表示真实处理IO的毫秒数。
  • deltams表示上个快照统计以来的时间长度(毫秒数),数据来自/proc/stat
所以%util100%,可以理解为一秒内比如作为1000次检查,发现每次都有io在处理。但是由于IO有并发处理能力,100%不一定说明IO能力达到了上限,要结合avgqu-sz进行综合判断。

结合上面的知识,再扩展一个示例3,加-p ALL,可以看到磁盘各分区的情况。持续打印
#iostat -mzxt -p ALL 1


遗留问题
1.iowait含不含网络?
两种情况
1)网络请求
2)网络挂载的盘
2.CPU指标中,什么样的操作,使用的是%sys


参考:
Systems Performance: Enterprise and the Cloud

没有评论:

发表评论