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

12

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

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

Лорин Хохштайн
источник
Не могли бы вы вставить итоговую область, которую вы видите, когда запускаете topкоманду?
mfriedman

Ответы:

7

iostatможет сообщить статистику, как это. Обычно входит в ваш дистрибутив в составе пакета sysstat.

Также стоит посмотреть на dstat , это современная замена.

sleske
источник
+1 потому что iostatсобирался быть моим ответом.
Эрни
4

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

Дэвид Спиллетт
источник
4

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

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