Какие показатели использования CPU отображаются в утилите `top` в Linux и как их интерпретировать?

«Какие показатели использования CPU отображаются в утилите `top` в Linux и как их интерпретировать?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В заголовке 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 на хосте («шумный сосед»).

Как я это использую:

  1. Вижу высокий wa -> смотрю await и %util в iostat -x 1 для дисков.
  2. Вижу высокий st в облаке -> ставлю алерт и открываю тикет в поддержку хостинга.
  3. Вижу высокий sy при низком us -> проверяю, не запущено ли слишком много процессов/потоков, использующих синхронизацию (mutex, spinlocks).