Какие ключевые показатели загрузки процессора (CPU) важно мониторить?

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

Ответ

Для диагностики производительности я смотрю не на один метрик, а на их совокупность. Вот основные:

1. Load Average (Средняя нагрузка) Показывает усредненное количество процессов, готовых к выполнению (состояние R) или ожидающих I/O (состояние D). Выводится как три числа: за 1, 5 и 15 минут.

  • Интерпретация: Значение 1.0 на одноядерной системе = 100% загрузка. Золотое правило: если нагрузка надолго превышает количество ядер CPU — система перегружена.
  • Пример: На 4-ядерном сервере load average: 8.50, 7.20, 6.10 говорит о серьезной перегрузке.

2. CPU Utilization (Использование CPU) Процентное использование, разбитое по типам. Ключевые поля из mpstat или top:

  • %user: Процессы пользователя.
  • %system: Процессы ядра.
  • %iowait (%wa): Процент времени, когда CPU простаивал в ожидании операций ввода/вывода. Высокий iowait — главный индикатор проблем с диском.
  • %steal (%st): Актуально для виртуальных машин. Показывает, сколько времени гипервизор не давал CPU вашей ВМ. Высокий steal — сигнал о «шумном соседе» в облаке.
  • %idle: Время простоя.

3. Контекстные переключения (Context Switches) и прерывания (Interrupts)

  • cs/cswch: Количество переключений контекста между процессами. Резкий рост может указывать на слишком большое количество потоков или активный IPC.
  • in/irq: Количество аппаратных прерываний.

Практический пример диагностики с помощью pidstat:

# Смотрим общую статистику по CPU каждую секунду
mpstat -P ALL 1

# Output example:
# 12:00:01 CPU  %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
# 12:00:02 all  45.2   0.0   8.1    30.5   0.0   0.2    0.0    0.0     0.0   16.0
# Вывод: Высокий %iowait (30.5%) — система уперлась в диск.

# Определяем, какой процесс вызывает I/O
pidstat -d 1

В системах мониторинга (Prometheus/Grafana) я настраиваю дашборды с графиками:

  • node_cpu_seconds_total{mode="idle"}user, system, iowait).
  • node_load1, node_load5, node_load15.
  • Алерт создаю на правило: load5 > (number_of_cores * 1.5).