Ответ
В заголовке top строка %Cpu(s) показывает глобальную загрузку всех ядер. Вот расшифровка каждого показателя на основе моей практики отладки:
%Cpu(s): 24.5 us, 1.5 sy, 0.0 ni, 73.2 id, 0.5 wa, 0.0 hi, 0.3 si, 0.0 st
us (user): 24.5% — время, проведенное в выполнении пользовательских процессов (ваше приложение, скрипты). Высокое значение обычно нормально для нагруженного сервиса.
sy (system): 1.5% — время, проведенное в пространстве ядра (обработка системных вызовов, работа с сетью/диском). Соотношение us/sy > 70/30 обычно говорит о нормальной прикладной нагрузке. Если sy высокое (например, >30%) — возможно, приложение делает слишком много системных вызовов.
ni (nice): 0.0% — время, затраченное на процессы с измененным (обычно пониженным) приоритетом (nice value).
id (idle): 73.2% — время простоя процессора. Означает, что CPU не было чем заняться.
wa (iowait): 0.5% — Ключевой метрика для DevOps! Время, когда CPU был свободен, но ожидал завершения операций ввода/вывода (чтение/запись на диск, сеть). Значение выше 5-10% — тревожный сигнал. Указывает на то, что система уперлась в производительность диска или сетевого хранилища.
hi (hardware interrupts) & si (software interrupts): Время на обработку прерываний. hi — от аппаратуры (сетевые карты, диски), si — от ядра (сетевые пакеты, планировщик). Резкий рост может быть связан с сетевым DDoS или проблемой драйвера.
st (steal time): 0.0% — Критично для облачных/виртуальных сред. Показывает, сколько времени гипервизор (VMware, KVM, AWS Xen) «забирал» у вашей виртуальной машины для других ВМ. Значение выше 5% говорит о нехватке физических CPU на хосте («шумный сосед»).
Как я это использую:
- Вижу высокий
wa-> смотрюawaitи%utilвiostat -x 1для дисков. - Вижу высокий
stв облаке -> ставлю алерт и открываю тикет в поддержку хостинга. - Вижу высокий
syпри низкомus-> проверяю, не запущено ли слишком много процессов/потоков, использующих синхронизацию (mutex, spinlocks).