磁盘使用率

监控磁盘使用率有俩个作用/目的:

1. 第一个目的与应用本身有关,如果应用本身在做大量的磁盘IO操作,那么IO就很容易成为瓶颈。

2.即使应用本身并没有做大量的磁盘IO,但是可能会由于大量的内存交换,而导致有大量的io,导致应用性能下降。

磁盘IO的监控方法:

iostat 5 ,

这个命令会显示磁盘每秒,或者一定周期内的写入,写出速度。比如下图:

          disk0       cpu    load average
    KB/t  tps  MB/s  us sy id   1m   5m   15m
   35.51   13  0.45   5  2 92  1.33 1.65 1.81

KB/t :每次transfer 35.51kb,tps:每秒做13次transfer,MB/s :每秒做0.45MB的数据传输。 0.45MB=35.51*13 KB

或者 iostat -xm 5 ,还可以计算磁盘使用率,不过不知道是怎么算出来的。

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
vda               0.00     0.00    0.00    0.80     0.00     0.00     8.00     0.00    0.50   0.25   0.02
vdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
vdc               0.00     5.40    0.00    9.20     0.00     0.06    12.70     0.01    1.09   0.43   0.40

 当写入或者读出的速率过高,或者磁盘使用率过高,就可以造成磁盘io的瓶颈。这时就要想办法降低磁盘IO了。

如果应用的磁盘IO预计不会很高,那么高的磁盘IO使用率很有可能是由于内存的换入换出造成的,这对服务类的应用是很不好的。

还要一种方法来监控是否有内存换入换出是 vmstat  , 如下图中的si,so就表示换进和换出的速率

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0 124668 158788 246668 3298720    0    1     7    21    0    0  3  1 96  0  0    
 0  0 124668 158540 246668 3298832    0    0     0    29 3065 4529  3  1 96  0  0    
 0  0 124668 157648 246668 3299012    0    0     0    65 3306 4868  2  1 97  0  0

总结:

 1. 大量的内存换入换出会影响性能。

 2.写入磁盘遇到瓶颈,可能是因为写入的太多,也有可能是因为写入的效率不高,导致吞吐量下降。

网络使用率

 网络利用率和磁盘利用率很相似,应用没有充分利用网卡,或者应用使用的量超过了网卡的最大值,都会造成性能的瓶颈。

遗憾的是,标准的系统工具只提供了写入写出的报文数或者字节数,并没有直接给出速度还是使用率,所以使用起来可能没有那么直观。

 系统的标准工具是netstat ,如图:它展示了有哪些网络连接,使用的协议,端口,状态,以及写入写出的字节数(Recv-Q,Send-Q)。

netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 dx-cos-mop02.dx.sanku:46603 set-gh-inf-kms-n:cslistener ESTABLISHED 
tcp        0      0 dx-cos-mop02.:etlservicemgr set-dx-meishi-crm-roo:42296 ESTABLISHED 
tcp        0      0 dx-cos-mop02.:etlservicemgr dx-meishi-crm-task05.:37923 ESTABLISHED 
tcp        0      0 dx-cos-mop02.dx.sanku:40005 dx-mdc-poi-apige:distinct32 ESTABLISHED 
tcp        0      0 dx-cos-mop02.dx.sankua:9501 gh-meishi-merchant-ap:34949 ESTABLISHED 
tcp        0      0 dx-cos-mop02.dx.sanku:18391 dx-mdc-poi-apiget01.d:irdmi ESTABLISHED 
tcp        0      0 dx-cos-mop02.:etlservicemgr dx-cos-coop04.dx.sank:25587 ESTABLISHED 
tcp        0      0 dx-cos-mop02.dx.sanku:54375 dx-wpt-mdc-p:teradataordbms ESTABLISHED 

幸运的是,有一些开源和商业的工具来监控网络带宽,比如 nicstat

% nicstat 5
Time Int rKB/s wKB/s rPk/s wPk/s rAvs wAvs %Util Sat 

17:05:17 e1000g1 225.7 176.2 905.0 922.5 255.4 195.6 0.33 0.00

其中  e1000g1 表示千兆网络,但是注意网络带宽的单位是字节,所以千兆表示1000/8 =125MB。

这里每秒的写入写出发别是225.7KB/s 176.2KB/s 所有使用率是 (0.2257+0.176.2)/ 125==0.33%

通常来说,网络的使用率无法达到100%。 这和网络的协议还有中间的传递介质都有很大的关系。通常40%就基本饱和了。

总结:

1. 网络应用要确保网络io不会成为瓶颈。

2. 网络io瓶颈的造成一个是因为写的效率不足造成吞吐量低 ,另外一个是因为写了太多,达到了宽带饱和。