前言
在之前的博客中我们详细的说明了性能瓶颈的解决思路,也详细介绍了Vmstat的使用,今天我们就详细说说磁盘IO的那些事,磁盘IO是我们最常遇到的瓶颈,下面我们根据iostat详细聊聊磁盘IO
一、磁盘IO性能指标
1.1、每秒IO数(tps)
对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和
1.2、吞吐量( Throughput)
指硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为 Kbps, MB/s 等。
1.3、磁盘活动时间百分比( Utilization) %util
磁盘处于活动时间的百分比,即磁盘利用率,磁盘在数据传输和处理命令(如寻道)处于活动状态。磁盘利用率与资源争用程度成正比,与性能成反比。也就是说磁盘利用率越高,资源争用就越严重,性能也就越差,响应时间就越长。一般来说,如果磁盘利用率超过 70%,应用进程将花费较长的时间等待 I/O 完成,因为绝大多数进程在等待过程中将被阻塞或休眠。
1.4、服务时间( ServiceTime) svctm
指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关, CPU/内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过20ms,一般可考虑会对上层应用产生影响。
1.5、I/O 等待队列长度( Queue Length)
指待处理的 I/O 请求的数目,如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过2,一般认为该磁盘存在I/O性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的 I/O 等待队列长度。
1.6、等待时间( Wait Time)
指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果I/O请求持续超出磁盘处理能力,意味着来不及处理的 I/O 请求不得不在队列中等待较长时间。
二、Iostat详解
2.1、安装iostat命令1yum install sysstat -y
2.2、iostat参数详解1
2
3
4
5
6
7[root@tshare365 ~]# iostat --help
Usage: iostat [ options ] [ [ ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ [...] | ALL ] ]
[ [...] | ALL ] [ -p [ [,...] | ALL ] ]
[root@tshare365 ~]#
我们最常用的是
-C 显示CPU使用情况
-d 显示磁盘使用情况
-x 显示详细信息
-k 以 KB 为单位显示
-m 以 M 为单位显示
2.3、iostat查看服务器IO情况1
2
3
4
5
6
7
8
9
10
11
12
13[root@tshare365 ~]# iostat -x
Linux 2.6.32-431.el6.x86_64 (tshare365) 02/26/2015 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.03 0.00 0.15 0.04 0.00 99.78
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.21 3.06 0.06 0.22 5.05 26.32 113.45 0.01 48.50 4.05 0.11
scd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 0.88 0.88 0.00
dm-0 0.00 0.00 0.26 3.28 4.95 26.32 8.84 1.35 382.60 0.31 0.11
dm-1 0.00 0.00 0.00 0.00 0.03 0.00 8.00 0.00 5.88 1.29 0.00
[root@tshare365 ~]#
cpu属性值说明:%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
disk属性值说明:rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
r/s: 每秒完成的读 I/O 设备次数。即 rio/s
w/s: 每秒完成的写 I/O 设备次数。即 wio/s
rsec/s: 每秒读扇区数。即 rsect/s
wsec/s: 每秒写扇区数。即 wsect/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
avgqu-sz: 平均I/O队列长度。
await: 平均每次设备I/O操作的等待时间 (毫秒)。
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,IO响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当前IO在等待。
2.4、查看磁盘的吞吐量1
2
3
4
5
6
7
8
9
10[root@tshare365 ~]# iostat -d -k
Linux 2.6.32-431.el6.x86_64 (tshare365) 02/26/2015 _x86_64_ (1 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.28 2.51 13.07 214679 1119426
scd0 0.00 0.00 0.00 132 0
dm-0 3.51 2.46 13.07 210381 1119388
dm-1 0.00 0.01 0.00 1188 0
[root@tshare365 ~]#
tps:该设备每秒的传输次数
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;
本博客至此介绍,如有什么问题请留言!