Перейти к основному содержанию

1 5 15 — Load Average

Linux

Хочется немного коснуться такой полезной штуки как 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
la
top
la
htop
la
cat /proc/loadavg
la
w
la

Из пакета systat:

sar -q 1 3
la

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

Вопреки распространённому мнению, никаких прямых замеров за 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.

Ссылки

https://habr.com/ru/companies/vk/articles/335326/

Теги

 

Похожие материалы

Уменьшение виртуального диска с LVM

У нас есть виртуальная машина, на ней есть диск. Диск большой, данных мало. Наша задача - сделать диск меньшего размера. На борту Logical Volume Manager (LVM). Gparted не умеет переносить данные на LVM разделах. Будем делать всё руками.

Медиа сервер на базе Seafile + MiniDLNA

Я уже давно пользуюсь домашним облаком Seafile, которое развёрнуто дома на виртуальном сервере Ubuntu 18. В один прекрасный день мне подсказали мысль, сделать на базе Seafile + MiniDLNA домашний медиа сервер.

Теги

XWiki — установка на Ubuntu 18.04 LTS

XWiki — это платформа для совместного доступа к веб-приложениям. XWiki предоставляет любому пользователю простой и быстрый доступ к важной информации, упрощая и структурируя разрозненные данные. Установим XWiki на Ubuntu 18.04 LTS. База данных Postgresql.

Теги