1

Linux で bash、awk、sed を使用してすべてのディスク I/O レートを監視するために必要です。問題は、時間間隔ごとに 1 行を返さなければならないことです (したがって、この 1 行には 、 、 、 が含まれますtpsが、kB_read/sすべてkB_wrtn/skB_readディスクkB_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
4

2 に答える 2

2

iotop http://guichaz.free.fr/iotop/を使用してみませんか?

于 2012-08-25T21:02:57.113 に答える
2

dstatあなたが探しているものかもしれません。レポートできる項目は多数あり、デフォルトで表示される一般的な項目がいくつかあります。

于 2012-08-25T22:55:29.867 に答える