iostat命令详解

iostat 主要是统计 磁盘活动情况。

iostat有以下缺陷:

iostat的输出结果大多数是一段时间内的平均值,因此难以反映峰值情况
iostat仅能对系统整体情况进行分析汇报,却不能针对某个进程进行深入分析。
iostat未单独统计IO处理信息,而是将IO处理时间和IO等待时间合并统计,因此包括await在内的指标并不能非常准确地衡量磁盘性能表现。

参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。

输出如下

输出信息的意义

上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)

指定监控的设备名称为sda,该命令的输出结果和上面命令完全相同。

默认监控所有的硬盘设备,现在指定只监控sda。

-x 参数

iostat还有一个比较常用的选项 -x,该选项将用于显示和io相关的扩展数据。

输出信息的含义

深入解析 avgqu-sz

IO请求的队列长度,反映了系统磁盘任务处理的繁忙程度,该值越大,表示排队等待处理的IO请求越多。
平均队列长度的计算:
我们考虑如下的场景,如果同一时间来了250个IO请求,后续再也没有新的请求到来。这种情况下,每个请求处理时间都是4ms,那么所有IO的平均等待时间为:

平均等待时间 = 单个请求处理时间*(1+2+3+4…+(请求总数-1))/请求总数

对于我们的例子来说,平均等待时间是 500ms,那么所有IO花费的总时间为250*500 = 125000ms,这个时间除以1000ms,得到 125,即平均队列长度。
这个值很明显是符合直观的。排在队列最前端的IO认为,队列的长度是0,第2个IO认为队列的长度是1,第3个IO认为队列的长度是2,最后一个认为队列的长度是249。

await

await是单个I/O所消耗的时间,包括硬盘设备处理I/O的时间和I/O请求在kernel队列中等待的时间:

await = IO 平均处理时间 + IO在队列的平均等待时间

正常情况下队列等待时间可以忽略不计:

await = ((所有读IO的时间)+(所有写IO的时间))/((读请求的个数) + (写请求的个数))

这个值,多大算正常呢?
对于SSD,从0.0x毫秒到1.x毫秒不等,具体看产品手册。
对于机械硬盘,大致来说一万转的机械硬盘是8.38毫秒,包括寻道时间、旋转延迟、传输时间。
关于await的一个误区是,人们常常武断地认为,await值比较高,就认为磁盘性能差,其实,await这个值不能反映硬盘设备的性能。
我们考虑两种IO的模型:

250个IO请求同时进入等待队列
250个IO请求依次发起,待上一个IO完成后,发起下一个IO
第一种情况await高达500ms,第二个情况await只有4ms,但是都是同一块盘。
在实践中,要根据应用场景来判断await是否正常,如果I/O模式很随机、I/O负载比较高,会导致磁头乱跑,寻道时间长,那么相应地await要估算得大一些;如果I/O模式是 顺序读写,只有单一进程产生I/O负载,那么寻道时间和旋转延迟都可以忽略不计,主要考虑传输时间,相应地await就应该很小,甚至不到1毫秒。
对磁盘阵列来说,因为有硬件缓存,写操作不等落盘就算完成,所以写操作的service time大大加快了,如果磁盘阵列的写操作不在一两个毫秒以内就算慢的了;读操作则未必,不在缓存中的数据仍然需要读取物理硬盘,单个小数据块的读取速度跟单盘差不多。

%util

%util表示该设备有I/O(即非空闲)的时间比率,不考虑I/O有多少,只考虑有没有。

很多初学者看到%util 等于100%就说硬盘能力到顶了,这种说法是错误的。

由于现代硬盘设备都有并行处理多个I/O请求的能力,所以%util即使达到100%也不意味着设备饱和了,举个简化的例子:

某硬盘处理单个I/O需要0.1秒,有能力同时处理10个I/O请求。
当10个I/O请求依次顺序提交的时候,需要1秒才能全部完成,在1秒的采样周期里%util达到100%。
而如果10个I/O请求一次性提交的话,0.1秒就全部完成,在1秒的采样周期里%util只有10%。
可见,即使%util高达100%,硬盘也仍然有可能还有余力处理更多的I/O请求,即没有达到饱和状态。那么iostat有没有哪个指标可以衡量硬盘设备的饱和程度呢?很遗憾,没有。

实例分析

上面看到,磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB。

可以看到磁盘的平均响应时间await

Original: https://www.cnblogs.com/111testing/p/15818663.html
Author: 清风软件测试
Title: iostat命令详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/551068/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球