Единица Load Average — это хорошая нагрузка или перегруженная система? Как интерпретировать этот показатель?

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

Ответ

Load Average (LA) — это среднее количество процессов, находящихся в состоянии R (Running) или D (Uninterruptible Sleep, обычно ожидание дискового I/O), за последние 1, 5 и 15 минут.

Интерпретация зависит от количества CPU-ядер:

  • LA ≤ количество ядер: Система в целом справляется с нагрузкой. Например, LA 3.0 на 4-ядерной машине — нормально.
  • LA > количество ядер: Начинается очередь процессов. Например, LA 8.0 на 4-ядерной машине означает, что в среднем 4 процесса выполняются, а еще 4 ждут своей очереди. Это признак перегрузки.
  • LA значительно превышает количество ядер (в 2-3 раза и более): Серьезная перегрузка, отклик системы будет очень медленным.

Как проверить:

# Узнать количество ядер процессора
nproc
# или
grep -c ^processor /proc/cpuinfo

# Посмотреть Load Average
uptime
# или
cat /proc/loadavg
# Вывод: 2.34 1.85 1.02 ...

Важные нюансы для DevOps:

  1. Высокий LA при низком использовании CPU: Классический признак проблемы с I/O (медленный диск или сеть). Процессы заблокированы в состоянии D. Необходимо смотреть метрики диска (iostat, iotop) и сети.
  2. Кратковременные всплески (например, во время деплоя или обработки очереди) допустимы, если средние значения за 5/15 минут возвращаются к норме.
  3. В контексте оркестраторов (Kubernetes): Высокий LA на нодах может приводить к задержкам планирования Pod'ов. Мы настраивали алерты в Prometheus на основе node_load1 и node_load5, сравнивая с количеством ядер (node_cpu_seconds_total{mode="idle"}).

Пример алерта для Prometheus (node_exporter):

alert: HighNodeLoad
expr: (node_load1 / count without (cpu, mode) (node_cpu_seconds_total{mode="idle"})) > 1.5
for: 10m
labels:
  severity: warning
annotations:
  summary: "Высокая нагрузка на ноде {{ $labels.instance }}"