Добавить в корзинуПозвонить
Найти в Дзене

Load Average — 1 5 15

Хочется немного коснуться такой полезной штуки как LA — Load Average. Это среднее значение нагрузки на систему в Linux. Очень важная метрика, на основе которой (и не только) в современных облаках происходит автоматическое масштабирование виртуальных машин-инстансов. А это — деньги. Один из частых вопросов на собеседованиях по Linux или DevOps: "Что такое Load Average?" Вопрос с подвохом, почти такой же как: "Как работает DHCP?" или "Как загружается операционная система?" И чем больше вы знаете о теме, тем глубже можете дать ответ. Один из вариантов определения LA: Load Average — это среднее количество потоков за единицу времени, ожидающие выполнения. Можно ещё сказать: Load Average — это среднее значение нагрузки системы. Или можно сказать так: Load Average — это потребность в исполняемых потоках в виде усреднённого количества исполняемых и ожидающих потоков. Или: Load Average — это число, показывающее, сколько задач в среднем хотели бы прямо сейчас работать, даже если они вынуждены жд
Оглавление

Хочется немного коснуться такой полезной штуки как LA — Load Average. Это среднее значение нагрузки на систему в Linux.

Очень важная метрика, на основе которой (и не только) в современных облаках происходит автоматическое масштабирование виртуальных машин-инстансов. А это — деньги.

Один из частых вопросов на собеседованиях по Linux или DevOps: "Что такое Load Average?" Вопрос с подвохом, почти такой же как: "Как работает DHCP?" или "Как загружается операционная система?" И чем больше вы знаете о теме, тем глубже можете дать ответ.

Один из вариантов определения LA:

Load Average — это среднее количество потоков за единицу времени, ожидающие выполнения.

Можно ещё сказать:

Load Average — это среднее значение нагрузки системы.

Или можно сказать так:

Load Average — это потребность в исполняемых потоках в виде усреднённого количества исполняемых и ожидающих потоков.

Или:

Load Average — это число, показывающее, сколько задач в среднем хотели бы прямо сейчас работать, даже если они вынуждены ждать.

Большинство утилит и инструментов отображает не одно, а три средних значения: для 1, 5 и 15 минут.

  • За 1 минуту — мгновенный снимок
  • За 5 минут — среднесрочная тенденция
  • За 15 минут — долгосрочная нагрузка
uptime
-2
top
-3
htop
-4
cat /proc/loadavg
-5
w
-6

Из пакета systat:

sar -q 1 3
-7

Минутка занудства

Вопреки распространённому мнению, никаких прямых замеров за 1, 5 или 15 минут в ядре Linux не производится. Три числа — это даже не классические средние арифметические значения за указанные промежутки времени.

В основе расчёта лежит экспоненциально взвешенное скользящее среднее (Exponentially Weighted Moving Average) от суммы двух очередей ядра:

  • nr_running() — потоки, готовые к выполнению (те, что сейчас работают на CPU, и те, что ждут очереди на CPU)
  • nr_uninterruptible() — потоки в состоянии TASK_UNINTERRUPTIBLE (обычно это ожидание дискового I/O, реже — блокировки, проблемы с NFS или ожидание устройств)

Итоговое значение показывает средневзвешенное количество потоков, которые хотят выполняться (нуждаются в CPU) или вынуждены ждать диск.

Что касается значений для 1, 5 и 15 минут — это тоже упрощение. На самом деле числа 1, 5 и 15 — это константы, используемые в уравнении для вычисления экспоненциально затухающих скользящих сумм пятисекундного среднего значения. Таким образом, классические "средние нагрузки для 1, 5 и 15 минут" не совсем точно отражают нагрузку именно за эти временные интервалы в привычном понимании.

Минутка занудства закончена

По одному скриншоту с тремя значениями LA вы можете не только посмотреть текущую нагрузку на систему. Дополнительно можно оценить динамику нагрузки.

  • 0 (все нули) — простой
  • 1 мин > 15 мин — нагрузка растёт
  • 1 мин < 15 мин — нагрузка спадает
  • LA > Количества ядер — не хватает ресурсов, задач больше, чем исполнителей

На практике алерт часто ставят не на превышение количества ядер N, а на N × 0.7 или N × 1.5 в зависимости от сценария:

  • Веб-сервер / API: LA > 0.7 × N — уже смотрим. Время отклика начинает расти нелинейно.
  • Пакетная обработка / CI/CD: LA до 1.5 × N — нормально, задачи готовы подождать очереди.
  • БД (PostgreSQL, MySQL): LA > N — почти всегда плохо, там каждый ждущий поток — это клиент с таймаутом.

В облаках метрика CPUUtilization  тоже есть, но автоскейлинг по LA работает надёжнее, так как LA лучше отражает реальный спрос. Порог срабатывания обычно: LA >= 80% от N в течение 5 минут.

Хороший инженер смотрит не только LA. Если значение LA большое, то смотрим ещё и процессоры, дисковую подсистему, сетевые прерывания. Если CPU сильно утилизируется, нужны дополнительные процессоры. Если нехватка IOPS — модернизируем хранилище. DDoS, отвалилась шара, сетевые прерывания — чиним сеть.

Важное дополнение про сеть

В Linux Load Average включает процессы, ожидающие не только ядра CPU но и дисковые операции (I/O). Высокая нагрузка может быть из-за медленного диска, а не из-за процессора.

Классический Load Average в Linux рассчитывается на основе двух состояний процессов: TASK_RUNNING (CPU) и TASK_UNINTERRUPTIBLE (I/O).

Однако, некоторые сетевые операции тоже могут переводить процессы в состояние TASK_UNINTERRUPTIBLE. При этом Load Average на вашем сервере начнет расти, хотя CPU и локальный диск будут простаивать. Так что сеть тоже влияет на LA.

Источник

1 5 15 — Load Average | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.