【性能测试】- 磁盘I/O性能分析

一、磁盘I/O性能指标

有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

【性能测试】- 磁盘I/O性能分析_第1张图片

二、查看磁盘IO并找出占用IO读写很高的进程

1、首先通过top,查看磁盘IO

通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了,当然也可能是其他原因,例如网络 IO 过高等。

2、然后通过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%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)

3、找出使用IO高的进程:iotop

   (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统计,每秒更新一次

【性能测试】- 磁盘I/O性能分析_第2张图片

之后可根据 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

三、磁盘I/O和CPU及内存的关系

    iostat -c 查看部分 CPU 使用情况

一般会重点关注 %iowait 和 %idle,分别表示 CPU 等待 IO 完成时间的百分比和 CPU 空闲时间百分比。

如果 %iowait 较高,则表明磁盘存在 IO 瓶颈;如果 %idle 较高,则 CPU 比较空闲;

如果两个值都比较高,则有可能 CPU 在等待分配内存,瓶颈在内存,此时应该加大内存;

如果 %idle 较低,则此时瓶颈在 CPU,应该增加 CPU 资源。

四、其他相关磁盘查看命令

(1)fdisk -l  :查看磁盘信息,包括磁盘容量,扇区大小,IO 大小等信息

【性能测试】- 磁盘I/O性能分析_第3张图片

(2)df :查看磁盘使用情况,通常看磁盘使用率

你可能感兴趣的:(性能测试)