有4个核心的磁盘I/O指标,如下表所示:
磁盘性能指标 | 解释 | iostat -d -x 1 展示所有的磁盘I/O指标 |
使用率 | 磁盘处理 I/O 的时间百分比 | %util |
IOPS | 是指每秒的 I/O 请求数 | r/s+ w/s |
吞吐量 | 每秒的 I/O 请求大小 | rkB/s+wkB/s |
响应时间 | 指 I/O 请求从发出到收到响应的间隔时间 | r_await+w_await |
观测磁盘的I/O性能指标:iostat 是最常用的磁盘 I/O 性能观测工具,它提供了每个磁盘的使用率、IOPS、吞吐量等各种常见的性能指标,当然,这些数据实际上来自 /proc/diskstats. iostat -d -x -k 1
通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了,当然也可能是其他原因,例如网络 IO 过高等。
iostat -d -x -k 1
2 查看磁盘是否达到瓶颈(或者:iostat -x 1
2 )可以使用命令:iostat -dxk 1 2或者使用sar -d -p 1 2命令,实际使用中主要还是看 await 、 svctm 、 %util 参数
其中, “-d”参数代表查看磁盘性能,“-p”参数代表将 dev 设备按照 sda,sdb……名称显示,“1”代表每隔1s采取一次数值,“2”代表总共采取2次数值。
[sdk_test@ssdk1 server]$ iostat -d -x -k 1 2
Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/14/2016 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
vda 0.00 0.19 0.00 0.65 0.04 3.37 10.41 0.00 0.78 0.41 0.03
vdb 0.00 5.85 0.29 1.13 6.23 27.93 48.06 0.00 1.44 0.41 0.06
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
可以看到磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了
输出项的意义:
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;即delta(rsect)/s
wsec/s:每秒写入的扇区数。即delta(rsect)/s
rKB/s:每秒读K字节数。是rsec/s的一半,因为每扇区大小为512字节 ;
wKB/s:每秒写K字节数。是wsec/s的一半
avgrq-sz 平均每次设备I/O操作的数据大小(扇区)
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await:平均每次设备I/O操作的等待时间(毫秒)。(衡量IO的响应速度)
svctm:平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio)
%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的 (衡量 IO 的繁忙程度)
对于磁盘 IO 性能,一般有如下评判标准:
(await,通俗理解就想我们去医院看病排队等待的时间,这个值和医生的服务速度(svctm)和你前面排队的人数(avgqu-sz)有关。一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。 await 值的大小一般取决与 svctm 的值和 I/O 队列长度以 及I/O 请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘或者升级CPU来解决问题。
(3)%util:%util 项的值也是衡量磁盘 I/O 的一个重要指标,衡量IO的繁忙程度,这个值越大,说明产生的IO请求较多,IO压力较大,我们可以结合%idle参数来看,如果 %idle < 70% 就说明 IO 比较繁忙了。也可以结合 vmstat 的 b 参数(等待 IO 的进程数)和 wa 参数(IO 等待所占 CPU 时间百分比)来看,如果 wa > 30% 也说明 IO 较为繁忙。如果 %util 接近 100% ,表示磁盘产生的 I/O 请求太多,I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)
(1)通过 iotop 命令: iotop -oP 或者iotop (如果没有该命令,请通过 yum install iotop 进行安装。)
# iotop
Total DISK READ: 8.00 M/s | Total DISK WRITE: 20.36 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
15758 be/4 root 7.99 M/s 8.01 M/s 0.00 % 61.97 % bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp
(2)通过pidstat命令:pidstat -d 1 (展示I/O统计,每秒更新一次)
之后可根据 PID 查看相关进程信息。
(3)但等待I/O也不一定说明它在疯狂读写磁盘。为了确定它确实读写很多,可以用/proc
目录下的信息来定位
[root@myos ~]# cat /proc/27456/io
rchar: 42857442
wchar: 35657666
syscr: 44932
syscw: 9744
read_bytes: 1530859520
write_bytes: 13824000
cancelled_write_bytes: 1249280
iostat -c 查看部分 CPU 使用情况
一般会重点关注 %iowait 和 %idle,分别表示 CPU 等待 IO 完成时间的百分比和 CPU 空闲时间百分比。
如果 %iowait 较高,则表明磁盘存在 IO 瓶颈;如果 %idle 较高,则 CPU 比较空闲;
如果两个值都比较高,则有可能 CPU 在等待分配内存,瓶颈在内存,此时应该加大内存;
如果 %idle 较低,则此时瓶颈在 CPU,应该增加 CPU 资源。
四、其他相关磁盘查看命令
(1)fdisk -l :查看磁盘信息,包括磁盘容量,扇区大小,IO 大小等信息
(2)df :查看磁盘使用情况,通常看磁盘使用率