2012-08-25 65 views
1

我需要一個在Linux上使用bash,awk,sed監控所有磁盤I/O速率的腳本。問題是它必須每個時間間隔返回一行(所以這一行應該包含:tps,kB_read/s,kB_wrtn/s,kB_read,kB_wrtn,但總結爲每個磁盤)。這裏 自然的選擇當然是:用於在Linux上監控磁盤I/O速率的腳本

-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  

我幾乎沒有,但是這個(在循環中運行)使得每次從頭開始被調用,所以我沒有得到從間隔到間隔的統計數據,但總是平均數(所以每個調用都帶給我相同的結果輸出)。

我知道這聽起來很複雜,但也許有人有一個想法?也許完全不同的方法? Thx。

編輯:

樣品輸入(/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 
+0

您能否提供樣本輸入以及樣本輸出 – Anders

回答

2

爲什麼不使用iotophttp://guichaz.free.fr/iotop/

+0

因爲我需要在文本文件中記錄輸出。 IOtop只顯示連續輸出AFAIK。 –

+2

您可以使'iotop'在批處理模式下運行以保存其輸出。例如:'iotop -bto --iter = 1' –

2

dstat可能是你在找什麼。它有很多東西可以報告,默認顯示一些常見的東西。