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


101

Linuxでハードディスクの負荷を監視するための良いコマンドラインユーティリティはありますか?topディスクアクティビティiso cpuの使用状況を監視するようなものです。

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

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


1
完璧な質問、まさに私が探していたものです=)
rafa.ferreira

のように、sysfsを直接読み取ることができ/sys/block/sda/statます。フィールド#1は読み取りの合計数、フィールド#5は書き込みの合計#、フィールド#9は進行中のI / O操作の数です。詳細については、kernel.org / doc / Documentation / iostats.txtを参照してください。値は符号なしで長く、折り返される場合があります。
サスタニン

Pleskサーバーでは常にこの問題と闘っているので、これは非常に良い質問です。ただし、不足しているのはhow do you do it with SNMP?です。ログインして確認するのは問題ありませんが、実際には履歴データが必要です。
ユージンファンデルメルウェ14年

回答:


83

この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%に近い場合、デバイスの飽和が発生します。


3
もしあれば、これはどのパッケージにDebianにありますか?apt-cache dumpiostatについて何も表示されませんでした
hBy2Py

9
@ブライアン:それはsysstatパッケージに含まれています(とにかくyumを介して...)
ジョー

RHEL 6.5でこれを見つけることができませんでした。これはRHELで利用できますか?
ハゾック

これは遅延を伴うことなく機能しますか?単一のインスタンスを実行してデータを取得しようとすると、おそらくサンプルを取得できないため、同じ数が取得されますか?
ウィルフ

@Hazok RHEL 6.5のsysstat RPMの一部です。
TheGeneral

81

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

ここに画像の説明を入力してください

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


1
確かに、一つが発行することができるように、Ubuntuの中にデフォルトでインストールされていません:sudoのそれを得るためiotopのインストールapt-getの
モシェ

1
iotopは2.6.20よりも高いカーネルを必要としますが、残念ながらRedHat el4とel5の両方を除外します。
デイブチェイニー

2
RedHat 5.4現在、iotopを機能させるために必要なビットはバックポートされています。楽しい!
デイブチェイニー

Fedoraにあります:)。
ジャミー

13

コメントでサスタニンが示唆したように、/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を参照してください


7

あなたは見てみる必要がある上にすべて一箇所に、iotopの/トップ/ iftopのパワーを兼ね備えていると、システム上の重要な部分を強調しています。


5

nmonツールをご覧になることをお勧めします。後で閲覧するために、ファイルにデータを記録するだけでなく、いくつかのシステムパラメータのライブロードを表示します。ここから入手できる無料のツールです。


5

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

例:私のラップトップはSATAディスクから82MB /秒、キャッシュから2GB /秒を取得します。私のdekstopは、キャッシュから12GB /秒、HW 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を読み込む時間


SFへようこそ。文字列を逆引用符で囲むか、段落をインデントすることで、投稿でコードの強調表示を使用できます。
チャフィンク

2つのこと-1)--setraは現在-a、および2)は、hdparm -{T,t}コマンドはディスク読み取りのみを発行するstraceため、非破壊的です。(インターネットに関するアドバイスに関する標準免責事項が適用されます)
-i336_

4

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

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


3

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.