← Назад к вопросам

Что означает параметр load average в top?

2.0 Middle🔥 63 комментариев
#Инфраструктура и DevOps

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Load Average в top и как его интерпретировать?

Load Average (средняя нагрузка системы) — это ключевой метрика в утилите top и других инструментах мониторинга (например, uptime, htop), которая показывает усреднённое количество процессов, готовых к выполнению (т.е. находящихся в состоянии R — running или runnable), а также процессов, ожидающих завершения операций ввода-вывода (в состоянии D — uninterruptible sleep), за определённые промежутки времени. Это один из основных индикаторов загрузки системы, особенно CPU.

В выводе top load average обычно отображается в формате:

load average: 1.25, 0.80, 0.50

Эти три числа представляют собой среднюю нагрузку за последние 1, 5 и 15 минут соответственно.

Детальное объяснение смысла Load Average

  1. Что учитывает нагрузка?

    • Процессы в состоянии R (Running/Runnable): процессы, которые активно используют CPU или готовы к выполнению, но ожидают своей очереди из-за ограниченного количества ядер CPU.
    • Процессы в состоянии D (Uninterruptible Sleep): процессы, заблокированные на выполнении системных вызовов, чаще всего — на операциях дисковой подсистемы (чтение/запись). Они не могут быть прерваны и также учитываются в нагрузке, что часто приводит к путанице, когда высокий load average не сопровождается высокой утилизацией CPU.
  2. Как интерпретировать значения?
    Значение load average интерпретируется относительно количества доступных CPU-ядер в системе. Узнать количество ядер можно командой nproc или grep -c processor /proc/cpuinfo.

    • Load average = 1.0 на одноядерной системе означает, что в среднем 1 процесс был активен или готов к выполнению. Это считается оптимальной нагрузкой.
    • Load average > 1.0 на одноядерной системе указывает на перегрузку: процессы выстраиваются в очередь.
    • На многопроцессорных/многоядерных системах нагрузку сравнивают с общим количеством ядер. Например, для 4-ядерного сервера:
     - `load average = 4.0` — полная загрузка всех ядер.
     - `load average < 4.0` — система справляется с нагрузкой, есть свободные ресурсы.
     - `load average > 4.0` — процессы ожидают выполнения, возможны задержки.

Примеры для PHP Backend-разработчика

Сценарий 1: Высокий load average при низкой утилизации CPU

Частая ситуация в веб-приложениях — bottleneck ввода-вывода (например, медленные запросы к базе данных, чтение/запись файлов).

# top output example
%Cpu(s): 15.3 us, 2.1 sy, 0.0 ni, 82.6 id,  0.0 wa
load average: 8.50, 7.25, 6.80

Здесь CPU простаивает на 82.6% (idle), но нагрузка высокая (8.50). Это явный признак ожидания операций I/O — процессы "висит" в состоянии D. Для PHP это может означать:

  • Медленные запросы к MySQL/PostgreSQL.
  • Блокировки файловой системы (например, сессии в файлах).
  • Обращение к внешним API с большими задержками.

Сценарий 2: Высокий load average при высокой утилизации CPU

%Cpu(s): 90.2 us, 8.5 sy, 0.0 ni, 1.3 id,  0.0 wa
load average: 12.30, 10.50, 9.80

На 4-ядерном сервере нагрузка 12.30 означает, что процессов в 3 раза больше, чем ядер. PHP-процессы (например, workers FPM) активно потребляют CPU. Возможные причины:

  • Неоптимальный код (тяжёлые вычисления, отсутствие кэширования).
  • Высокий трафик, требующий масштабирования.
  • Фоновые задачи (queues), конкурирующие за ресурсы.

Практическое применение в отладке

Для анализа процессов, вносящих вклад в нагрузку, используйте:

# Показать процессы в состоянии R и D
ps aux | awk '$8 ~ /[RD]/'

# Или в интерактивном режиме top, нажав '1' для просмотра нагрузки по ядрам
# и отсортировав по состоянию (нажав 'b', затем 'R' или 'D')

Для PHP-FPM пулов полезно мониторить нагрузку после оптимизаций, например, введения кэширования OPcache или настройки числа воркеров.

Заключение

Load Average — это не просто "загрузка CPU", а комплексный показатель, отражающий конкуренцию за вычислительные ресурсы и ресурсы ввода-вывода. Для backend-разработчика понимание этой метрики критично при:

  • Диагностике производительности — разграничении CPU-bound и I/O-bound проблем.
  • Планировании масштабирования — решение, добавлять ли больше CPU или оптимизировать I/O (например, переходить на SSD, настраивать индексы БД).
  • Настройке окружения — определении оптимального количества PHP-FPM воркеров, чтобы балансировать между нагрузкой и использованием памяти.

Постоянно высокий load average (например, в 2-3 раза превышающий количество ядер на протяжении 5-15 минут) — серьёзный сигнал для глубокого анализа профилировщиком (Xdebug, Blackfire) и мониторинга инфраструктуры.

Что означает параметр load average в top? | PrepBro