Ответ
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:
- Высокий LA при низком использовании CPU: Классический признак проблемы с I/O (медленный диск или сеть). Процессы заблокированы в состоянии
D. Необходимо смотреть метрики диска (iostat,iotop) и сети. - Кратковременные всплески (например, во время деплоя или обработки очереди) допустимы, если средние значения за 5/15 минут возвращаются к норме.
- В контексте оркестраторов (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 }}"