iostat,Linux上实时查看磁盘IO状态的工具,也是IO监控方面的入门工具,相信很多人都会用到。这里做个小总结归档,以防日后不用生疏。iostat 数据来源/proc/stat .
iostat 工具具体用法可以通过man iostat 查看,以下只是演示和分析结果参数。
Linux 上执行: iostat -kx 2
截取片段如下:
每个字段都是什么意思?
rrqm/s
每秒进行merge的读操作数目。文件读的IO操作合并。
wrqm/s
每秒进行merge的写操作数目。文件写的IO操作合并。
r/s
每秒完成的读I/O设备次数。
w/s
每秒完成的写I/O设备次数。
rsec/s
每秒读扇区数。
rkB/s
每秒读K字节数。
wkB/s
每秒写K字节数。
avgrq-sz
平均每次设备I/O操作的数据大小(扇区)。
avgqu-sz
平均I/O队列长度。
await
平均每次设备I/O操作的等待时间(毫秒)。
svctm
平均每次设备I/O操作的服务时间(毫秒)。
%util
一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。
如何深度的理解各个阶段的参数? 下图给了很好的说明:
上图的左边是iostat显示的各个性能指标,每个性能指标都会显示在一条虚线之上,这表明这个性能指标是从虚线之上的那个读写阶段开始计量的,比如说图中的w/s从Linux IO scheduler开始穿过硬盘控制器(CCIS/3ware),这就表明w/s统计的是每秒钟从Linux IO scheduler通过硬盘控制器的写IO的数量。
结合上图对读IO操作的过程做一个说明,在从OS Buffer Cache传入到OS Kernel(Linux IO scheduler)的读IO操作的个数实际上是rrqm/s+r/s,直到读IO请求到达OS Kernel层之后,有每秒钟有rrqm/s个读IO操作被合并,最终转送给磁盘控制器的每秒钟读IO的个数为r/w;在进入到操作系统的设备层(/dev/sda)之后,计数器开始对IO操作进行计时,最终的计算结果表现是await,这个值就是我们要的IO响应时间了;svctm是在IO操作进入到磁盘控制器之后直到磁盘控制器返回结果所花费的时间,这是一个实际IO操作所花的时间,当await与svctm相差很大的时候,我们就要注意磁盘的IO性能了;而avgrq-sz是从OS Kernel往下传递请求时单个IO的大小,avgqu-sz则是在OS Kernel中IO请求队列的平均大小。
如何评估磁盘性能,iostat 我们重点看那些参数?
磁盘性能的评估通常通过iops , 吞吐率 ,如 小文件的随机读写我们看中它的iops ,大文件的顺序读写,我们看中它的传输速度,也就是吞吐率或吞吐量。
iops = r/s + w/s
吞吐率 = rkB/s + wkB/s
除iops,吞吐量之外,另外比较重要的还有时延,await , svctm 这两个参数。
平均每次IO操作大小 :avgrq-sz (扇区),如: 55 *512/1024 KB . 另外也可以通过 rkB/s 除 r/s 或 wkB/s 除w/s 算得。
注意:
IO的响应时间会成非线性的增长,越是接近最大值,响应时间就变得越大,而且会比预期超出很多。负载%util也并非线性增长,一些异常也可以引发%util 瞬间100%
本文参考:
http://www.dbabeta.com/2009/io-performence-03_check-performence-in-linux.html