Linux-ディスクIOを待っているものを確認する方法


42

負荷が非常に高いサーバーがあります。CPU使用率に関しては、何も飛び出していませんし、スワッピングでもありません。

いくつかのプロセスがディスクIOを待っている原因だと思うので、何が待っているのかを見たいです。

IOを待機しているプロセスを表示するプログラムはありますか?私は知ってiotopいますが、それは現在IOをしていることを示しています。

それともこれはばかげた質問ですか?(もしそうならどのように説明します:))

回答:


47

iotopのようなI / Oモニターを使用できますが、現在のI / O操作があるプロセスまたはスレッドのみが表示されます。

I / Oを待機しているプロセスを参照する必要がある場合は、ウォッチを使用して、以下のようにSTATフラグ「D」のプロセスを監視します。

watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"

甘い。これは私をうまく助けてくれました。
スチュトンプソン

2
あるいは、iotop --helpに従って「実際にI / Oを実行しているプロセスまたはスレッド」のみを表示する「iotop -o」コマンドを使用できます。
ライアン

1
@Ryan 必要な情報を提供しないことに加えて、昇格した特権が必要です。、とだけ必要な情報を与え、上昇権限は必要ありません。iowaitiotopwatchpsawk
リッチ

4
私はpsPOSIXフラグを使用awkして、異なるwatch "(ps -eo stat,pid,comm|awk '(NR==1)||(\$1~/D/){print}')"方法で編集していました。-この方法で、列見出しと、stat、pid、およびコマンドを取得します。
リッチ

18

ps axu「D」状態にあるプロセスを探します。ps(1)のマンページに基づいて、D状態にあるプロセスは割り込み不可能なスリープ状態にあります。これはほとんどの場合、「IOの待機」を意味します。残念ながら、これらのプロセスを強制終了することは通常不可能です。


16

Zancheyの答えは、IOを待っているものを見つけるために知っている最高の方法です。

サーバーに高負荷がかかっていると言うとき、それはどういう意味ですか?特に反応が遅いものはありますか?

ディスクIOがボトルネックであるかどうか疑問に思っている場合は、iostatコマンド(sysstatパッケージの一部)を使用して、ディスクが実際に高負荷になっているかどうかを確認します。

例:

[kbrandt@kbrandt-opadmin: ~] iostat -x 1 3                                                                                           

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.38   34.71    2.64    1.18    0.00   59.21 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.11    17.35    2.21   20.31    46.57   301.40    15.45     2.27  100.66   1.48   3.34
sda1              0.10    17.31    2.21   20.31    46.48   301.10    15.44     2.27  100.66   1.48   3.34
sda2              0.00     0.00    0.00    0.00     0.00     0.00     3.50     0.00   30.00  30.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00    18.44     0.00  677.67 512.61   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.22    0.00    4.31    0.00    0.00   89.47   
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sr0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

1
iostatの出力を解釈する方法を説明すると、「ディスクが実際に高負荷になっているかどうかを確認する」のに役立ちます。
スコットブキャナン

0

どのプロセスがブロックの読み取り/書き込み操作を行っているかのblock_dumpロギングを有効にします。

echo 1 > /proc/sys/vm/block_dump
tail -f /var/log/syslog

完了したら、ログファイルをスパムしないようにトレースを無効にします。

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