web-dev-qa-db-ja.com

Linux-ディスクを待っているものを確認するにはどうすればよいですかIO

負荷が非常に高いサーバーがあります。 CPU使用率の点で私には何も飛び出していません。それはスワップではありません。

一部のプロセスがディスクIOを待機している原因だと思います。待機しているものを確認したいと思います。

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

それともこれはばかげた質問ですか? (もしそうなら、方法を説明してください:))

42
Rory

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

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

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

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

18
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
16
Kyle Brandt

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

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

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

echo 0 > /proc/sys/vm/block_dump
0