比思論壇

標題: Linux磁盘IO监测 [打印本頁]

作者: wabb44400    時間: 2012-9-14 19:00
標題: Linux磁盘IO监测
DB运行产生太多的磁盘IO的话,性能肯定会受到影响。可以借助zabbix这样的工具进行磁盘IO的监测,或者自己动手都可以。

      我们可以从proc/diskstats中直接获取信息:

  7 3 loop3 0 0 0 0 0 0 0 0 0 0 0
7 4 loop4 0 0 0 0 0 0 0 0 0 0 0
7 5 loop5 0 0 0 0 0 0 0 0 0 0 0
7 6 loop6 0 0 0 0 0 0 0 0 0 0 0
7 7 loop7 0 0 0 0 0 0 0 0 0 0 0
.....
8       0 sda 16140 67741 1740112 1453724 16858 18744 1043336 390704 0 173612 1844580
8       1 sda1 176 138 1468 1160 0 0 0 0 0 1160 1160
8       2 sda2 164 486 1300 1556 0 0 0 0 0 1556 1556

sda为整个硬盘的统计信息

sda1为第一个分区的统计信息

sda2为第二个分区的统计信息。

     信息依次为:

    1、major 主设备号

    2、minor 磁盘次设备号

    3、name  磁盘的设备名

    4、rio  读请求总数

    5、rmerge  合并的读请求总数

    6、rset 读扇区总数

    7、读数据花费的时间,单位ms

    8、wio写请求总数

    9、wmerge 合并的写请求总数

    10、wset 写扇区总数

    11、写数据花费的时间

    12、现在正在进行的IO数等于IO队列中请求数

    13、系统真正花费在IO上的时间,减去重复等待时间

    14、系统花费在IO上花费的时间。

     要计算某块磁盘的IOPS的话,只需要将第4列和第8列的值相加。

     监控代码:

     #!/bin/bash
uprio=0
upwio=0
while true
    do
    rio=$(grep '\bsda\b' /proc/diskstats | awk '{print $4}')
    wio=$(grep '\bsda\b' /proc/diskstats | awk '{print $8}')
    Real_rio=$[ $rio - $uprio ]
    Real_wio=$[ $wio - $upwio ]
    Iops=$[$Real_rio + $Real_wio]
    echo "Iops:$Iops   Read : $Real_rio   Write: $Real_wio"
    uprio=$rio
    upwio=$wio
    sleep 1
    done
     监控输出:

Iops:35373   Read : 16792   Write: 18581
Iops:9   Read : 0   Write: 9
Iops:0   Read : 0   Write: 0
Iops:0   Read : 0   Write: 0
Iops:0   Read : 0   Write: 0
Iops:5   Read : 0   Write: 5
Iops:43   Read : 0   Write: 43
      
     对于DB服务器 可以考虑将日志文件和数据文件放到不同的磁盘,这样就可以分别监控 日志和 数据的IOPS。这个可以参考:http://keeland.org/?p=45

    对于DB所使用的磁盘,我们还应该监测其IO利用率,可以通过IOSTAT 进行。
作者: liudiyeye    時間: 2013-3-25 14:23
这个有什么用




歡迎光臨 比思論壇 (http://108.170.5.98:8080/) Powered by Discuz! X2.5