Load average (средняя нагрузка) — метрика Linux, отражающая среднее число задач в очереди планировщика ядра: выполняющихся (running) и ожидающих свободного ядра или завершения I/O (uninterruptible sleep). Отображается тремя числами: за 1, 5 и 15 минут. Команды для просмотра: uptime, top, cat /proc/loadavg.
Что означают три числа
Пример вывода uptime: load average: 3.21, 1.87, 0.95
- 3.21 — среднее за последнюю минуту. Текущее состояние. Высокое значение — идёт пиковая нагрузка.
- 1.87 — среднее за 5 минут. Краткосрочный тренд.
- 0.95 — среднее за 15 минут. Долгосрочный тренд. Малое значение здесь при высоком значении за 1 минуту — нагрузка только что началась.
Интерпретация зависит от числа ядер CPU:
- Load average = N ядер — 100% загрузка без очереди. Норма.
- Load average > N ядер — есть задачи, ожидающие в очереди. Перегрузка.
- Load average < N/2 ядер — сервер загружен менее 50% мощности.
Пример: сервер с 4 ядрами CPU, load average 2.0 — нагрузка 50%, норма. Load average 8.0 — перегрузка вдвое, 4 задачи ждут в очереди.
Нюанс Linux: D-состояние и I/O wait
В отличие от BSD/macOS, Linux включает в load average процессы в состоянии D (uninterruptible sleep) — ожидание завершения I/O-операции. Это принципиальный нюанс: высокий load average не всегда означает перегрузку CPU. Диагностика причины:
vmstat 1— столбецr(running) vsb(blocked, ожидание I/O). Еслиbбольшое, проблема в дисках.iostat -x 1— загрузка дисков (%util). Близко к 100% — диск перегружен.top— строка CPU: процентwa(iowait). Высокий iowait при низком CPU = дисковое узкое место.ps aux --sort=-state | head— процессы в состоянии D.
Алгоритм вычисления
Linux вычисляет load average через EWMA (Exponentially Weighted Moving Average — экспоненциальное скользящее среднее) с коэффициентами затухания для периодов 1, 5 и 15 минут. Обновление происходит каждые 5 секунд. Формула: load = load * exp(-5/60) + n * (1 - exp(-5/60)), где n — текущее число задач в очереди. Добавление D-состояния в load average произошло в Linux 0.99.14 (1993) — решение, которое критикуют до сих пор, поскольку оно смешивает CPU-нагрузку с I/O-ожиданием.
История
Метрика load average появилась в ранних версиях UNIX в 1970-х. В Linux реализация через EWMA с тремя периодами стабилизировалась в начале 1990-х. В 2017 году Брендан Грег (Brendan Gregg) опубликовал детальный анализ Linux load average, показав, что метрика отличается от традиционной UNIX из-за D-состояния, — это вызвало широкую дискуссию в сообществе.
Мониторинг load average
Для VPS-сервера рекомендуемые пороги алертинга: warning при load average 1-minute > N*1.5, critical при > N*3 (N — число ядер vCPU). Через Prometheus node_exporter метрики: node_load1, node_load5, node_load15. Пример Prometheus-алерта:
alert: HighLoadAverage
expr: node_load1 > (count(node_cpu_seconds_total{mode="idle"}) * 2)
for: 5m
labels:
severity: warning
Высокий load average при низком CPU usage и высоком iowait — признак I/O bottleneck: медленный HDD, перегруженный NFS или зависшая сетевая файловая система.
Инструменты диагностики нагрузки
Набор утилит для понимания причин высокого load average на сервере:
htop— интерактивный мониторинг процессов. Сортировка по CPU: F6 → CPU%.iotop -a— дисковые операции по процессам. Показывает, кто активно пишет на диск.perf top— профилировщик ядра. Показывает горячие функции CPU.dstat 1— комплексный мониторинг: CPU, RAM, диски, сеть в одном выводе.atop— исторические данные с сохранением в файл. Позволяет просмотреть нагрузку за прошедший час.