首页 > 集群架构 > 性能优化 > Linux性能分析之二(iostat)
2015
03-07

Linux性能分析之二(iostat)

前言

   在之前的博客中我们详细的说明了性能瓶颈的解决思路,也详细介绍了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命令

 yum install sysstat  -y

2.2、iostat参数详解

[root@tshare365 ~]# iostat  --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]
[root@tshare365 ~]#

我们最常用的是

-C 显示CPU使用情况

-d 显示磁盘使用情况

-x 显示详细信息

-k 以 KB 为单位显示

-m 以 M 为单位显示

2.3、iostat查看服务器IO情况

[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属性值说明:

  1. %user:CPU处在用户模式下的时间百分比。

  2. %nice:CPU处在带NICE值的用户模式下的时间百分比。

  3. %system:CPU处在系统模式下的时间百分比。

  4. %iowait:CPU等待输入输出完成时间的百分比。

  5. %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

  6. %idle:CPU空闲时间百分比。

备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

disk属性值说明:

  1. rrqm/s:  每秒进行 merge 的读操作数目。即 rmerge/s

  2. wrqm/s:  每秒进行 merge 的写操作数目。即 wmerge/s

  3. r/s:  每秒完成的读 I/O 设备次数。即 rio/s

  4. w/s:  每秒完成的写 I/O 设备次数。即 wio/s

  5. rsec/s:  每秒读扇区数。即 rsect/s

  6. wsec/s:  每秒写扇区数。即 wsect/s

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

  8. wkB/s:  每秒写K字节数。是 wsect/s 的一半。

  9. avgrq-sz:  平均每次设备I/O操作的数据大小 (扇区)。

  10. avgqu-sz:  平均I/O队列长度。

  11. await:  平均每次设备I/O操作的等待时间 (毫秒)。

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

  13. %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、查看磁盘的吞吐量

[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:写入的总数量数据量;

本博客至此介绍,如有什么问题请留言!




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复