【问题标题】:Script for monitoring disk i/o rates on Linux在 Linux 上监控磁盘 i/o 速率的脚本
【发布时间】:2012-08-20 21:42:15
【问题描述】:

我需要一个使用 bash、awk、sed 来监控 Linux 上所有磁盘 i/o 速率的工具。问题是它必须在每个时间间隔返回一行(因此这一行应包含:tpskB_read/skB_wrtn/skB_readkB_wrtn,但按所有磁盘汇总)。 这里的自然选择当然是:

 -d -k -p $interval $loops

将其限制为我使用的所有磁盘:

 -d -k -p `parted -l | grep Disk | cut -f1 -d: | cut -f2 -d' '` 

现在总结列的好技巧:

  -d -k -p `parted -l | grep Disk | cut -f1 -d: | cut -f2 -d' '` > /tmp/jPtafDiskIO.txt     
echo `date +"%H:%M:%S"`,`awk 'FNR>2' /tmp/jPtafDiskIO.txt | awk 'BEGIN {FS=OFS=" "}NR == 1 { n1 = $2; n2 = $3; n3 = $4; n4 = $5; n5 = $6; next }    { n1 += $2; n2 += $3; n3 += $4; n4 += $5; n5 += $6 }    END { print n1","n2","n3","n4","n5 }'` >> diskIO.log     

我快到了,但是这(在循环中运行)每次都从一开始就被调用,所以我没有得到间隔到间隔的统计信息,但总是平均(所以每次调用都会给我带来几乎相同的输出)。

我知道这听起来很复杂,但也许有人有想法?也许完全不同的方法? 谢谢。

编辑:

样本输入(/tmp/jPtafDiskIO.txt):

> Linux 2.6.18-194.el5 (hostname)  08/25/2012
> 
> Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
> sda               0.00         0.00         0.00      35655         59
> sda2              0.00         0.00         0.00         67        272
> sda1              0.00         0.00         0.00        521        274
> sdb              52.53         0.56       569.40   20894989
> 21065384388 sdc               1.90        64.64        10.93
> 2391333384  404432217 sdd               0.00         0.00         0.04
> 17880    1343028

输出diskIO.log:

16:53:12,54.43,65.2,580.37,2412282496,21471160238

【问题讨论】:

  • 能否请您提供示例输入以及示例输出

标签: linux bash awk disk iostat


【解决方案1】:

为什么不使用iotop http://guichaz.free.fr/iotop/

【讨论】:

  • 因为我需要在文本文件中记录输出。 IOtop 仅显示连续输出 AFAIK。
  • 您可以让iotop 以批处理模式运行以保存其输出。例如:iotop -bto --iter=1
【解决方案2】:

dstat 可能就是您要找的。它有很多可以报告的内容,默认显示一些常见的内容。

【讨论】:

    猜你喜欢
    • 2017-03-23
    • 2013-09-18
    • 2012-03-22
    • 1970-01-01
    • 2019-12-07
    • 2014-05-20
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多