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

Как я могу определить, какие процессы вызывают высокие нагрузки, если они не связаны с высокой загрузкой процессора?

Иногда мои серверы показывают высокую среднюю загрузку в «верхней» программе (например, нагрузка составляет ~ 10 на 4-ядерном компьютере), но фактическое использование ЦП не особенно велико.

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

iostat может сообщать такую ​​статистику. Обычно включается в ваш дистрибутив в пакет sysstat.

dstat тоже стоит взглянуть, это современная замена.

Если у вас есть Учет ввода-вывода в вашем ядре, тогда вы можете использовать iotop давать такую ​​информацию. Кроме того, инструменты мониторинга, такие как collectd, могут записывать данные и сообщать о них.

Чтобы выяснить, что вызывает высокую нагрузку, вы можете проверить несколько вещей.

  • vmstat -w покажет вам ovierwiem (процессы, своп, память, процессор, io, система)
  • pmstat -P ALL предоставит вам статистику (с% iowait) на ядро ​​процессора
  • iostat -x ищите высокий% util или долгое ожидание или большой средний размер очереди
    • копать глубже с iotop
  • ps -ax найдите состояние D, которое является непрерывным сном (обычно IO), запустите его еще раз, проверьте, находятся ли они все еще в состоянии D
    • копать глубже со strace
    • проверьте файлы и соединения этих процессов с помощью lsof и netstat
  • sar / sysstat - с помощью этого инструмента вы можете изучать не только статистику «сейчас», но и проверять, что происходило вчера в полночь.
    • sar -b - общие мероприятия io
    • sar -d - индивидуальные блочные устройства io-активности