web-dev-qa-db-ja.com

Linuxでハードディスクの負荷を監視するにはどうすればよいですか?

Linuxでハードディスクの負荷を監視するための優れたコマンドラインユーティリティはありますか? topのようなものですが、ディスクアクティビティを監視しています。 CPU使用率。

より具体的には、実行するプログラムのさまざまな部分でいくつかの最適化を行った後の一部の(重い負荷の)サーバーでは、今のボトルネックは単にディスク上のファイルへのログ記録にあると思います。しかし、サーバーが処理できるトラフィックの量を評価することは非常に困難です。

私の理想的なツールは、「現在、ディスク帯域幅の35%を使用しています」と表示されるツールです。何か案は?

105
Pieter

iostatツールを使用すると、これをかなり適切に測定できます。

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

ディスク使用率は最後の列にリストされています。これは次のように定義されます

I/O要求がデバイスに発行されたCPU時間の割合(デバイスの帯域幅使用率)。この値が100%に近い場合、デバイスの飽和が発生します。

85
Dave Cheney

iotop は、各プロセスが使用している量IOを調べるtopのバージョンです。これは、標準のUbuntuリポジトリにあります。RHELにあるのか、RHELにあるのかはわかりませんFedoraですが、そうでなければなりません。

enter image description here

Iotopをサポートしていない古いカーネル(たとえばCentOS 5.xまたはRHEL 5.x)の場合は、代わりにtopioを使用してください(ここに記載: http://yong321.freeshell.org/freeware/pio.html#linux 。io統計は/ proc // ioに依存し、iotopと同様の機能を提供します。詳細はリンクを参照してください。

82
Tim Howland

コメントでサスタニンが示唆しているように、/sys/block/sda/statまたは/proc/diskstatsで指定された値を直接処理できます。これは、言及されている他のどのツールも利用できず、簡単にインストールできない場合に役立ちます。

たとえば、(IIUC)次のようなもの(bashの場合)は、1秒あたりの読み取り数を示します。

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

https://www.kernel.org/doc/Documentation/iostats.txt および https://を参照してくださいドキュメントについては、www.kernel.org/doc/Documentation/block/stat.txt

Iotop/top/iftopの機能をすべて1か所にまとめ、システムの重要な部分を強調表示する atop を確認する必要があります。

8
Yvan

Nmonツールをご覧になることをお勧めします。それはあなたが後で閲覧するためにファイルにデータを記録するだけでなく、多くのシステムパラメータのライブロードを示します。これは無料のツールです ここ

6
MikeyB

総帯域幅を調べるには、hdparm -T /dev/sdaバッファキャッシュ(fileio)のパフォーマンスをテストするhdparm -t /dev/sdaデバイスの読み取りパフォーマンスをテストする

例:私のラップトップはSATAディスクから82MB /秒、キャッシュから2GB /秒を取得します。私のdekstopは、キャッシュから12GB /秒、ハードウェアRAIDアレイから500MB /秒を取得します。サーバークラスのハードウェアでは、これらの最後の数値が2倍になる可能性があると思います。

先読みを256より高く設定すると、4096が最適です

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

異なるブロックサイズと異なる先読みで1GBを読み取る回数

5
user2987

ハードディスクの負荷を示すための標準ツールはiostatです。

ディスクの帯域幅がわからないため、使用している%ageディスク帯域幅はわかりません。いずれの場合でも、ディスクには、連続したデータの大規模な転送について、メーカーが引用した数値しかありません。

4
Alnitak

RRDtoolはあなたがやりたいことをするべきだと思います here デーモンを使用してシステムデータをダンプし、好きなように処理できるようにします。システムの負荷を測定するグラフなどを作成するためによく使用しました。

3
PixelSmack

htopはプロセス情報をチェックするための素晴らしいツールです。列を追加または削除することができ、その中にプロセスの読み取り速度と書き込み速度があります。

0
inquam