Назад | Перейти на главную страницу

Linux - Как узнать, что ждет ввода-вывода диска

У меня есть сервер с очень большой нагрузкой. У меня ничего не выскакивает с точки зрения загрузки процессора, да и подкачки не происходит.

Я думаю, это потому, что некоторые процессы ждут ввода-вывода диска, и я хочу посмотреть, что ждет.

Есть ли какая-нибудь программа, которая покажет мне, какие процессы ждут ввода-вывода? Я знаю о iotop но это показывает, что в настоящее время выполняет ввод-вывод.

Или это глупый вопрос? (Если да объясните как :))

Вы можете использовать монитор ввода-вывода, например iotop, но он покажет вам только процессы или потоки с текущими операциями ввода-вывода.

Если вам нужно просмотреть процессы, ожидающие ввода-вывода, используйте часы для отслеживания процессов с флагом STAT 'D', как показано ниже:

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

ps axu и ищите процессы, которые находятся в состоянии "D". На основе ps (1) справочная страница, процессы, которые находятся в состоянии D, находятся в непрерывном спящем режиме, что почти всегда означает «ожидание ввода-вывода». К сожалению, убить эти процессы обычно невозможно.

Ответ Занчи - лучшее, что я знаю, чтобы узнать, что ждет 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

включить block_dump регистрация того, какие процессы выполняют операции чтения / записи блоков:

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

когда закончите, отключите трассировку, чтобы не спамить файлы журнала:

echo 0 > /proc/sys/vm/block_dump