disk iostat

磁盘IO状态查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
1.安装
yum install sysstat

2.iostat查看IO性能
[root@zabbix-proxy-company ~]# iostat -x 1 1
Linux 3.10.0-123.el7.x86_64 (zabbix-proxy-company) 06/13/2017 _x86_64_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
1.73 0.00 1.31 0.70 0.00 96.26

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.00 0.10 0.06 0.76 15.72 0.00 3.17 0.91 3.25 1.98 0.02
vdb 0.00 0.02 0.00 43.64 0.00 702.61 32.20 0.10 2.19 0.36 2.19 0.81 3.53
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 0.37 0.37 0.00 0.23 0.00
dm-1 0.00 0.00 0.00 0.08 0.06 0.76 20.10 0.00 4.40 0.94 4.55 2.56 0.02

说明:
svctm参数代表平均每次设备I/O操作的服务时间(毫秒),反应了磁盘的负载情况,如果该项大于15ms,并且util%接近100%,那就说明,磁盘现在是整个系统性能的瓶颈了
await参数代表平均每次设备I/O操作的等待时间(毫秒),也要多和svctm来参考.差的过高就一定有IO的问题.
如果svctm比较接近await,说明I/O几乎没有等待时间;如果await远大于svctm,说明I/O队列太长,应用得到的响应时间变慢

正常情况下svctm应该是小于await值的,而svctm的大小和磁盘性能有关,CPU,内存的负荷也会对svctm值造成影响,过多的请求也会间接的导致svctm值的增加.
await值的大小一般取决与svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好;如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题.
%util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈.长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高,更快的磁盘来解决此问题

svctm一项正常时间在20ms左右,原因:
高速cpu会造成很高的iowait值,但这并不代表磁盘是系统的瓶颈.唯一能说明磁盘是系统瓶颈的方法,就是很高的read/write时间,一般来说超过20ms,就代表了不太正常的磁盘性能.为什么是20ms呢?一般来说,一次读写就是一次寻到+一次旋转延迟+数据传输的时间.由于,现代硬盘数据传输就是几微秒或者几十微秒的事情,远远小于寻道时间2~20ms和旋转延迟4~8ms,所以只计算这两个时间就差不多了,也就是15~20ms.只要大于20ms,就必须考虑是否交给磁盘读写的次数太多,导致磁盘性能降低了

iowait实际测量的是cpu时间:
%iowait = (cpu idle time)/(all cpu time)


注解:
cpu属性值说明:
%user: CPU处在用户模式下的时间百分比
%nice: CPU处在带NICE值的用户模式下的时间百分比
%system:CPU处在系统模式下的时间百分比
%iowait:CPU等待输入输出完成时间的百分比
%steal: 管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
%idle: CPU空闲时间百分比

disk属性值说明:
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge)
wrqm/s:每秒这个设备相关的写入请求有多少被Merge了

rsec/s:每秒读取的扇区数
wsec/s:每秒写入的扇区数

r/s:每秒完成的读I/O设备次数.即rio/s
w/s:每秒完成的写I/O设备次数.即wio/s

rkB/s:每秒读K字节数.是rsect/s的一半,因为每扇区大小为512字节
wkB/s:每秒写K字节数.是wsect/s的一半,因为每扇区大小为512字节

avgrq-sz:均每次设备I/O操作的数据大小(扇区)
avgqu-sz:平均I/O队列长度

await:每一个IO请求的处理的平均时间(单位是微秒毫秒).这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了.

svctm:平均每次设备I/O操作的服务时间(毫秒)

%util:在统计时间内所有处理IO时间,除以总共统计时间.例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度.一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)