Когда опытный администратор анализирует показатели сервера, то в первую очередь он обращает внимание на строку load average. Она есть в выводе uptime, top, htop и многих других инструментов. Цифры вроде 0.30 0.45 0.60 или 5.10 4.80 3.20 могут выглядеть загадочно, пока не понимаешь, что именно они отражают.
В этой статье мы понятно объясним, что такое load average, как он рассчитывается и как наконец-то прекратить паниковать и начать расшифровывать эти таинственные цифры.
По промокоду DZEN вы получите скидку на заказ VPS или dedicated от UFO.Hosting. С этим кодом вы сможете запустить свои проекты на надежной и производительной платформе, готовой к любым нагрузкам.
Коротко о том, что такое load average
Проще всего думать о load average как о среднем размере очереди задач, которые хотят получить процессорное время. В каждый момент времени в системе есть процессы, которые уже выполняются на ядрах CPU, готовы выполняться и ждут своей очереди или в случае Linux застряли в ожидании операции ввода-вывода в состоянии непрерывного сна.
Load average как раз и показывает, сколько таких задач в среднем было в системе за некоторый период времени.
Если говорить совсем простыми словами: это показатель того, насколько сервер был занят за последние минуты.
Откуда берутся три числа
Как мы уже писали выше, чаще всего load average выглядит как три числа разделенных запятой:
load average: 0.32, 0.47, 0.51
Это не три разных метрики, а одна и та же, но усредненная за разные интервалы:
- первое число — средняя нагрузка за последнюю минуту;
- второе — за последние 5 минут;
- третье — за последние 15 минут.
Благодаря этому можно увидеть не только текущее состояние, но и динамику. Например:
- если первое число заметно выше двух других, то значит, что нагрузка недавно выросла;
- если наоборот, первое ниже, а 5 и 15 минут большие — сервер только что пережил пик и сейчас приходит в норму.
Как связаны load average и количество ядер
Сами по себе цифры мало что говорят, пока не вспомнишь, сколько логических ядер у сервера. Тут правила простые:
- если у сервера 1 логическое ядро, то значение load average ≈ 1 означает, что процессор загружен «под завязку», но очередь еще не растёт;
- если у сервера 4 логических ядра, то load average ≈ 4 — это примерно та же ситуация: все ядра заняты, но очередь не переполнена;
- если load average значительно превышает число ядер, это значит, что задач больше, чем процессор физически способен обслужить одновременно, и они выстраиваются в очередь.
Важно: краткий всплеск load average выше числа ядер не обязательно трагедия. Небольшие пики бывают, особенно на системах с рывками нагрузки: резервное копирование, пакетные задачи, отчёты.
Чем load average отличается от «загрузки CPU в процентах»
Эти два показателя часто путают, хотя они совершенно разные. Процент загрузки CPU показывает, сколько времени процессор реально был занят вычислениями за выбранный промежуток.
Load average отражает другое: сколько задач в среднем одновременно хотели выполняться или ждали ресурсы (CPU или I/O).
Из-за этого бывают ситуации:
- CPU загружен не на 100%, а load average высокий. Так бывает, когда много процессов ждут медленный диск, попадая в состояние непрерываемого сна. CPU при этом простаивает, а нагрузка по LA высокая.
- CPU забит под 100%, а load average около числа ядер. Всё работает на пределе, но без очередей — система справляется.
Поэтому смотреть только на один показатель нельзя. Load average полезно сопоставлять с процентами загрузки CPU, статистикой по диску и памяти.
Что именно учитывается в Linux
В Unix-подобных системах изначально load average описывал средний размер очереди runnable-процессов: тех, кто прямо сейчас выполняется или готов к выполнению.
В Linux к этой группе добавили ещё один тип задач — процессы в непрерываемом сне. Обычно они ждут завершения операции ввода-вывода: чтение с диска, запись на диск, иногда сетевые операции или обращения к устройствам.
Как LA считается: идея без сложной математики
Теперь о том, как именно система получает эти числа. Load average — это не сырые измерения, а обобщенный результат. Система регулярно оценивает, сколько задач сейчас в очереди, и обновляет три значения LA для интервалов в 1, 5 и 15 минут.
Используется экспоненциальное скользящее среднее. Идея такая:
- текущий снимок нагрузки берется как одно значение;
- старое среднее немного забывается, новое значение немного прибавляется;
- чем меньше интервал (1 минута), тем сильнее вес нового состояния и тем быстрее метрика реагирует на изменения;
- чем больше интервал (15 минут), тем сильнее роль истории: одиночный всплеск почти не влияет на итоговую цифру.
Примеры чтения load average
Рассмотрим несколько условных ситуаций, чтобы закрепить понимание.
1 ядро, значения 0.10, 0.05, 0.01
Такой сервер большую часть времени простаивает. Нагрузки почти нет, процессы редко выстраиваются в очередь. Это нормальная картина для тестовой или вспомогательной машины.
4 ядра, значения 1.5, 1.2, 0.9
Все три числа ниже количества ядер, причём плавно растут. Нагрузка есть, но запас по CPU ощутимый. Возможно, на сервере крутятся веб-сайты или API с умеренным трафиком. Повода для тревоги нет.
4 ядра, значения 7.0, 6.5, 6.0
Сервер долго работает с нагрузкой выше своих возможностей. В очереди постоянно стоит больше задач, чем ядер. Пользователи могут замечать «тормоза», задержки в ответах, сервисы — падать по тайм-аутам. Здесь уже стоит разобраться:
- что занимает CPU;
- не упираемся ли в диск или сеть;
- хватает ли памяти, нет ли активного свопинга.
8 ядер, значения 8.0, 8.1, 8.2
Интересный случай: load average близок к числу ядер, но не превышает его. Сервер загружен почти на максимум, но очереди не растут. Для вычислительных задач или бэкенда с предсказуемой нагрузкой это может быть нормальным состоянием — железо используется эффективно. Однако запас по производительности уже небольшой: любой дополнительный всплеск нагрузки может привести к росту LA выше 8.
Что считать «нормой»
Жесткого универсального порога нет. Но есть несколько практических ориентиров:
- кратковременные пики — не проблема, особенно если 5- и 15-минутные значения остаются умеренными;
- если load average стабильно выше числа ядер — это сигнал о перегрузке или узком месте (CPU, диск, база данных, сеть);
- если LA заметно растет при активной дисковой нагрузке (резервное копирование, тяжёлые запросы к БД), стоит посмотреть на I/O и настройки хранения.
Важно всегда смотреть на контекст:
- тип задач (веб-сервер, вычислительные задачи, базы данных);
- время суток (пик активности пользователей, окно резервного копирования);
- графики за длительный период.
Если воспринимать load average не как абстрактную «температуру по больнице», а как аккуратно усредненную длину очереди задач, он становится простым и понятным инструментом в ежедневной работе администратора.