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

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

2.0 Middle🔥 181 комментариев
#Linux и администрирование

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

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

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

Что такое Load Average в Linux?

Load Average (средняя нагрузка системы) — это ключевой метрика производительности в Unix-подобных системах, включая Linux. Она показывает усреднённое количество процессов, находящихся в состоянии готовности к выполнению (в Runnable или Uninterruptible Sleep состоянии), за определённые промежутки времени. Обычно отображается три значения: за 1, 5 и 15 минут. Например, вывод команды uptime:

$ uptime
 15:30:00 up 10 days,  1:23,  2 users,  load average: 1.25, 0.75, 0.50

Здесь 1.25, 0.75 и 0.50 — нагрузка за 1, 5 и 15 минут соответственно.

Как рассчитывается Load Average?

Load Average считает процессы в двух состояниях:

  • Runnable (R) — процессы, готовые к выполнению и ожидающие своей очереди на CPU.
  • Uninterruptible Sleep (D) — процессы, заблокированные в ожидании завершения операций ввода-вывода (например, диск или сеть), которые нельзя прервать.

Важно: Load Average — это не процент загрузки CPU, а абсолютное число. Значение 1.0 на одноядерном процессоре означает, что в среднем один процесс постоянно готов к выполнению. На многоядерной или многопроцессорной системе это значение нужно интерпретировать относительно количества ядер.

Интерпретация значений

Базовые принципы:

  • Система с N ядрами/процессорами:
    • Load < N — система справляется, процессоры не перегружены.
    • Load ≈ N — полная загрузка, но без очереди.
    • Load > N — образуется очередь процессов, возможна деградация производительности.

Практические сценарии:

  1. Низкая нагрузка (Load << N):
    Система работает с запасом. Например, Load = 0.5 на 4-ядерном CPU означает, что в среднем половина одного ядра занята.

  2. Оптимальная нагрузка (Load ≈ 0.7*N):
    Часто считается "золотой серединой" — система используется эффективно, но сохраняет ресурсы для пиковых нагрузок.

  3. Высокая нагрузка (Load > N):
    Например, Load = 6.0 на 4-ядерном CPU означает, что в среднем 2 процесса ждут своей очереди. Начинаются задержки в выполнении задач.

  4. Очень высокая нагрузка (Load >> N):
    Load = 20.0 на 4-ядерном CPU — серьёзные проблемы: длинные очереди, возможные отказы в обслуживании.

Анализ трендов:

  • Сравнение значений за 1, 5 и 15 минут:
    • 1min > 5min > 15min — нагрузка растёт.
    • 1min < 5min < 15min — нагрузка снижается.
    • Все значения высокие — хроническая перегрузка.

Диагностика причин высокой нагрузки

1. Определение типа нагрузки:

# Узнаём количество CPU ядер
$ nproc
4

# Смотрим подробную статистику CPU (чтобы отличить CPU-bound от I/O-bound нагрузку)
$ mpstat 1 5
  • Если %usr высокий — нагрузка CPU-bound (тяжёлые вычисления).
  • Если %iowait высокий — нагрузка I/O-bound (медленные диски/сеть).

2. Поиск процессов:

# Показать топ процессов по использованию CPU
$ top
# или
$ htop

# Показать процессы в состоянии D (Uninterruptible Sleep)
$ ps aux | grep ' D '

3. Анализ ввода-вывода:

# Статистика I/O
$ iostat -x 1

Высокие значения await и %util указывают на проблемы с диском.

Практический пример интерпретации

Система с 8 ядрами:

  • load average: 4.50, 5.20, 4.80
  • Анализ:
    1. Средняя нагрузка (~5.0) ниже количества ядер (8) — система справляется.
    2. Значения за 1 и 5 минут близки, тренд стабильный.
    3. Но если при этом наблюдается медленный отклик, нужно проверить:
     - `%iowait` в `vmstat` или `mpstat`
     - Количество процессов в состоянии D
     - Дисковую активность

Важные нюансы:

  • Load Average включает не только CPU, но и I/O ожидание, что делает его комплексным показателем.
  • Современные системы с многоядерными CPU и гипертредингом требуют учёта логических процессоров.
  • Высокий Load Average при низкой утилизации CPU почти всегда указывает на проблемы с I/O или заблокированные процессы.

Для полноценного мониторинга Load Average следует анализировать в связке с другими метриками: утилизация CPU, память, дисковый I/O, сетевой трафик. В DevOps-практике эту метрику используют для автоматического скейлинга, определения пределов capacity и диагностики инцидентов.