Смотрим нагрузку на CPU правильно
Когда сервер начинает тормозить, первый порыв — открыть top или htop. Но они дают только общую картину. Если нужно понять, как нагрузка распределяется по ядрам, какой процент времени CPU проводит в ожидании ввода-вывода и где именно спрятана проблема — нужен mpstat.
Что такое mpstat
mpstat входит в пакет sysstat и показывает статистику использования процессора: отдельно по каждому ядру или в сумме. В отличие от top, он не интерактивный — это удобно для логирования вывода и использования в скриптах.
Основные флаги
Если запустить без аргументов, утилита покажет усредненную статистику с момента старта системы — обычно это не слишком полезно. Чаще используют так:
mpstat -P ALL 2 5-P ALL — показать все ядра2 — интервал в секундах5 — количество итераций
Пример вывода:
Linux 5.15.0 (srv01) 05/18/2026 _x86_64_ (4 CPU)
14:32:01 CPU %usr %nice %sys %iowait %irq %soft %steal %idle
14:32:03 all 12.3 0.0 3.1 8.4 0.0 0.1 0.0 76.1
14:32:03 0 45.2 0.0 5.3 2.1 0.0 0.2 0.0 47.2
14:32:03 1 3.1 0.0 1.2 18.3 0.0 0.0 0.0 77.4
14:32:03 2 2.4 0.0 2.8 9.2 0.0 0.1 0.0 85.5
14:32:03 3 0.8 0.0 3.2 4.1 0.0 0.0 0.0 91.9На что смотреть
%usr — время в пользовательском пространстве. Высокое значение обычно означает, что приложение сильно нагружено.
%sys — время в режиме ядра. Если оно неожиданно высокое, стоит проверить системные вызовы.
%iowait — CPU ждёт завершения операций ввода-вывода. Значение выше 10–15% обычно указывает на проблемы с диском или сетью.
%steal — время, которое гипервизор забрал у виртуальной машины. Если показатель стабильно выше 5%, на хосте не хватает ресурсов.
%idle — простой. Чем он ниже, тем выше нагрузка.
В примере выше видно, что нулевое ядро загружено на 45%, а %iowait на первом ядре — 18%. Это повод разобраться, какой процесс привязан к этим ядрам и почему он так активно работает с диском.
Смотрим только iowait
Если нужно быстро отследить проблемы с вводом-выводом:
mpstat -P ALL 1 | awk '/[0-9]/ {print $1, $2, $6}'Будет показано только время, номер ядра и %iowait.
Логирование
sysstat умеет собирать статистику в фоне через sar. Но если нужно просто сохранить данные в файл на время инцидента:
mpstat -P ALL 2 30 > /tmp/cpu_$(date +%F_%T).logЗапустит 30 итераций с интервалом 2 секунды и сохранит результаты в файл с временной меткой.
mpstat полезен, когда нужно быстро понять, как распределена нагрузка по ядрам, или найти аномалии — высокий %iowait, перекос нагрузки на одно ядро, активность гипервизора.