Load Average: как читать среднюю нагрузку Linux | Глоссарий FREEHOSTING

Load Average

Средняя нагрузка
Load Average — Load Average — три числа в выводе uptime, top, htop, показывающие среднее количество процессов в очереди готовых к выполнению или в состоянии I/O за последние 1, 5 и 15 минут. Главный индикатор, есть ли у системы запас по мощности.

Определение простыми словами

Load Average считает не CPU usage в процентах, а длину очереди задач, которые хотят выполниться или ждут диск. Грубо: если число равно количеству ядер — система загружена под завязку, но без затыка. Выше — кто-то ждёт. Ниже — есть запас.

На 4-ядерном сервере значение 4.0 — это 100% утилизация без задержек. Значение 8.0 — задачи стоят в очереди и латентность растёт. Значение 1.0 — система простаивает на 75%. Сравнивать LA нужно строго с количеством ядер из htop или nproc.

Сравнение трёх чисел Load Average

Окно Что показывает Когда смотреть
1 минута Текущий пик Реакция на событие, инцидент
5 минут Тенденция Растёт нагрузка или спадает
15 минут Базовая загрузка Capacity planning, алерты

Кейсы использования

  • LA 1m=8 на 4-ядерном сервере, 5m=2, 15m=1 — кратковременный всплеск (возможно cron). Не требует действий.
  • LA 1m=15, 5m=18, 20m=20 на 4 ядрах — устойчивая перегрузка. Нужно искать виновного процесса в htop и вызывать free на предмет swap.
  • LA 5.0 при CPU 20% — типичный признак I/O wait (диск или сеть). Проверять iostat, iotop.
  • Negative-сценарий: настроен алерт «LA > 10» без учёта ядер. На 32-ядерной ноде это норма, на 2-ядерной — катастрофа. Алерт бесполезен.
  • LSTM/Prophet прогноз LA на месяц позволяет планировать апгрейд VPS до того, как сайт начнёт тормозить.

Технические детали

# Текущий Load Average
uptime
# 14:32:18 up 12 days, 4:21, 2 users, load average: 0.42, 0.71, 0.85

# Альтернатива через /proc
cat /proc/loadavg
# 0.42 0.71 0.85 2/410 12345
# первые три — LA, потом running/total процессов, последний PID

# Подгонка под количество ядер
nproc
awk -v c=$(nproc) '{print "LA1="$1" cores="c" usage="$1/c*100"%"}' /proc/loadavg

# Алерт через bash + cron каждую минуту
* * * * * awk -v c=$(nproc) '{if ($1/c > 1.5) print strftime() " overload " $1}' 
  /proc/loadavg >> /var/log/load-overload.log

# Историческая динамика через sar
sar -q 1 60   # выборка каждую секунду 60 раз
sar -q -f /var/log/sa/sa$(date +%d -d yesterday)  # за вчера

Главный антипаттерн — настраивать алерт на абсолютное значение без нормализации по ядрам. Правильный порог: LA15 / nproc > 1.0 на протяжении 10+ минут. Так алерты будут одинаково корректны и для 1-ядерного VPS, и для 64-ядерного выделенного.

Частые вопросы

Какое значение Load Average считается нормальным?

LA, делённое на количество ядер. Значение до 0.7 на ядро — комфортно, 0.7–1.0 — рабочая загрузка, выше 1.0 — задержки. Смотреть нужно 5- и 15-минутное среднее.

Почему Load Average высокий, а CPU не загружен?

В Linux Load Average учитывает не только CPU, но и процессы в TASK_UNINTERRUPTIBLE (ждут диск или сеть). Если LA 5.0 при CPU 10% — это I/O wait, проверяйте iostat и iotop.

Как получить Load Average программно?

Читать /proc/loadavg (Linux) — три числа через пробел. Через системные вызовы getloadavg(3) в C/Python. В мониторингах Prometheus метрика node_load1, node_load5, node_load15.