概要
iostat命令是Linux下监控硬盘性能数据一个很好的工具,%util为iostat命令的一个输出值,从字面意思看该值代表了硬盘的使用率。
因此在一些情况下%util值=100,会被理解为硬盘性能已经达到瓶颈,这是错误的,这篇文章对此进行下介绍。
%util值输出的样例
# iostat -x 1 2
Linux 3.10.0-1127.el7.x86_64 (sr650-1123-9123) 07/10/2000 _x86_64_ (64 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.01 0.00 0.00 99.99
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.04 0.02 0.34 0.31 5.72 33.74 0.01 27.52 5.79 28.50 3.19 0.11
sda 0.00 0.00 0.00 0.00 0.00 0.00 51.57 0.00 0.54 0.54 0.00 0.51 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 51.57 0.00 0.82 0.82 0.00 0.80 0.00
dm-0 0.00 0.00 0.01 0.39 0.30 5.71 30.01 0.01 28.84 5.73 29.73 2.85 0.11
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 50.09 0.00 4.39 4.39 0.00 4.16 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 17.22 0.00 3.49 3.30 27.25 3.31 0.00
%util值代表的具体意思是什么?
这点我们看下Linux系统的man手册,如下:
# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
%util
Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation
occurs when this value is close to 100% for devices serving requests serially. But for devices serving requests in parallel, such as RAID
arrays and modern SSDs, this number does not reflect their performance limits.
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
%util
Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation
occurs when this value is close to 100%.
简单来说,就是硬盘设备上存在io的时间百分比。但有一点需要注意的时,在linux系统手册上特意强调了下:
该值不能作为性能瓶颈的依据。
%util值是怎么统计的
这部分请大家参考下redhat的kb:https://access.redhat.com/articles/4780161,KB中有比较详细的解释。
%util值是否意味这设备达到瓶颈了?
通常100%并不反映磁盘容量的使用情况——它只反映“已使用”的样本时间百分比,即存在一个io的样本时间百分比。例如,下面是本地连接的SATA磁盘的两个不同的iostat示例。两个示例都显示了100%的利用率:
Device:rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 7.00 12654.00 16.00 6327.00 84.00 1.01 1.99 0.16 0.08 100.00
:
sda 0.00 7.00 183.00 22.00 93696.00 116.00 915.24 17.86 85.22 4.88 100.0
再举一个例子,对于不同硬盘在同样的数据类型下,%util值会表现相同,如下所示:
12:00:01 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: dev259-0 1284.63 15831.81 46799.21 48.75 0.12 0.09 0.03 3.57
Average: dev259-1 1261.96 15874.92 46356.98 49.31 0.12 0.09 0.03 3.52
Average: dev259-3 1002.16 121002.87 129352.08 249.82 0.51 0.52 0.03 3.17
再举一个例子,对于不同硬盘,不同的数据类型下,可能带宽负载低的硬盘但iops高的硬盘,%util值反而会高,如下所示:
00:00:18 DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
Average: dev259-0 34.85 2308.42 2084.73 126.07 0.02 0.44 0.08 0.26
Average: dev259-1 34.52 2286.15 2074.46 126.34 0.02 0.45 0.07 0.25
Average: dev259-2 367.02 3033.19 937.96 10.82 0.06 0.16 0.72 26.35