Что показывает load average
Команда uptime (и хедер top) выдаёт три числа:
load average: 0.45, 0.30, 0.18
Это экспоненциально-взвешенные средние длины очереди процессов которые на момент сэмплинга находились в состоянии R или D (см. process-and-pid). Усреднение - за последние 1, 5 и 15 минут соответственно.
Само значение не нормировано на количество CPU. На машине с 1 ядром LA=1.0 означает «одно ядро занято 100%». На машине с 8 ядрами та же LA=1.0 это «одно из восьми занято».
Смотри в контексте: LA / nproc < 1.0 - недогруз, ~1.0 - предел,
>>1.0 - кто-то в очереди (CPU-bound или I/O-bound - см. ниже).
Где данные
cat /proc/loadavg- четыре поля:1m 5m 15m running/total last_piduptime- то же красивееtop/htop- обновляется в реальном времени
Важно: procs_running в /proc/stat - мгновенный счётчик процессов
готовых к выполнению. В отличие от LA-1m он не сглажен и реагирует
моментально - полезно для дебага.
R vs D - почему высокий LA не всегда CPU-проблема
Процессы в очереди LA это сумма двух типов:
- R (Running/Runnable) - хочет CPU
- D (Uninterruptible Sleep) - застрял на I/O в ядре, ждёт диск/NFS/dm
Сценарии при LA=8 на 4-CPU машине:
- 8 R, 0 D → CPU реально перегружен; нужно больше ядер или меньше работы
- 0 R, 8 D → CPU простаивает, виноват диск (NFS пропал, БД залипла, md-rebuild). Никакой апгрейд CPU не поможет.
Поэтому при ANY проблеме с LA первая команда - ps -eo state,pid,cmd | awk '$1 ~ /^[RD]/'.
В контейнерах
Контейнер делит ядро с хостом, и /proc/loadavg -
не контейнеризован. Внутри Docker-контейнера ты видишь LA всей
host-VM, не своего контейнера. Для per-container CPU-pressure используй
PSI (Pressure Stall Information) из cgroups v2.