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

Ответ

Load average — это средняя нагрузка на систему, которая показывает количество процессов, готовых к выполнению (в состоянии R — Running или Runnable) или ожидающих ресурсов ввода-вывода (в состоянии D — Uninterruptible sleep), усреднённое за три периода: 1, 5 и 15 минут.

Как интерпретировать:

  • Формат: load average: 1.23, 0.86, 0.45 (за 1, 5 и 15 минут соответственно).
  • Ключевое правило: значение сравнивается с количеством доступных CPU-ядер. Нагрузка 1.00 на одноядерном процессоре означает 100% загрузку.
  • Пример для 4-ядерного сервера:
    • 0.5 — система простаивает.
    • 4.0 — процессор полностью загружен, но очереди нет.
    • 8.0 — система перегружена: в среднем 4 процесса выполняются и ещё 4 ждут своей очереди.

Практический анализ:

  • Растущая нагрузка от 1 мин к 15 мин (3.0, 2.0, 1.0) говорит о снижении нагрузки.
  • Высокий load average при низком %CPU может указывать на проблемы с диском (много процессов в состоянии D).
# Узнать количество ядер для корректной интерпретации
nproc
# или
grep -c ^processor /proc/cpuinfo

Ответ 18+ 🔞

А, load average! Ну это ж классика, ебать мои старые костыли. Каждый раз, когда сервер тупит, все сразу смотрят на эти три цифры, как будто они откроют тайну мироздания.

Смотри, чувак, это просто средняя нагрузка. Не та, что у тебя после пятницы, а системная. Она считает, сколько процессов прямо сейчас готовы к работе (это состояние R) или висят в ожидании, пока диск или сеть ответят (это состояние D, самый неприятный тип). И усредняет это за три промежутка: за последнюю минуту, за пять и за пятнадцать. Видал в консоли load average: 1.23, 0.86, 0.45? Вот это оно и есть, первая цифра — за минуту, потом за пять, потом за пятнадцать.

А теперь самое важное, ёпта, без чего все эти цифры — просто хуй с горы. Их нельзя смотреть в отрыве от количества ядер твоего процессора! Это как оценивать пробку: одна машина в очереди на одной полосе — уже пиздец, а на десяти полосах — вообще похуй.

Ключевое правило, блядь: сравниваешь нагрузку с числом ядер.

  • Нагрузка 1.00 на одноядерном камне — значит, процессор загружен на все сто, но очередь пока не растёт.
  • Допустим, сервер у тебя четырёхядерный:
    • 0.5 — система почти спит, можно ещё пахать.
    • 4.0 — все ядра в работе, но очередь пустая, всё окей.
    • 8.0 — вот тут начинается веселье. Это значит, что в среднем 4 процесса работают, а ещё 4 стоят и ждут, когда освободится процессор. Очередь, блядь! Система перегружена.

Как анализировать на практике: Смотри на динамику. Если цифры такие: 3.0, 2.0, 1.0 — это хорошо. Нагрузка за последнюю минуту выше, но за 15 минут она падает. Значит, был всплеск, и система с ним справляется. А вот если load average зашкаливает, а процент загрузки CPU (%CPU) при этом низкий — это тревожный звоночек. Подозрение ебать чувствую! Скорее всего, куча процессов упёрлась в диск и висит в этом самом состоянии D (Uninterruptible sleep). Диск не успевает, всё ждёт. Хитрая жопа получается.

# Сначала узнай, с чем сравнивать. Сколько ядер-то?
nproc
# или по-старинке
grep -c ^processor /proc/cpuinfo

Вот и вся магия. Увидел высокий load — первым делом глянь, сколько ядер. А потом уже начинай паниковать или нет.