Как правильно смотреть нагрузку на CPU с mpstat

Смотрим нагрузку на 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, перекос нагрузки на одно ядро, активность гипервизора.