Найти тему

Что такое Load Average и какую информацию он несёт для системного адмистратора Linux

Оглавление

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

Что такое средняя загрузка?

Мы не будет обращаться к Википедии или учебникам по системному администрированию. Вместо этого я хочу на простом примере объяснить что такое load average.

Независимо от того какой на вашем сервере установлен процессор (мощный или нет, многоядерный или с одним ядром) он в процессе работы выполняет определенный программный код. Если бы на сервере был запущен один процесс, то вопроса распределения нагрузки не стояло, но как понимаете такое вряд ли когда-то возможно. Как в таком случае распределять ресурсы между запущенными процессами? Тут работает принцип, которым мы руководствовались в детстве, когда на одну приставку или компьютер было много желающих поиграть - мы обговаривали время игры, по истечению которого следует смена, например 15 минут на одного желающего.

Также поступает и процессор. Он выделяет тому процессу, которому нужны вычисления, некоторое время в течение которого предоставляет доступ к ресурсам. Это время называется тиком. Процессы при запросе тиков выстраиваются в очередь, при этом имеет значение приоритет процесса, так как если он высок, то процесс будет первым в очереди. Получается, если процесс потребляет много тиков, то значит система находится под нагрузкой. В Linux для того, чтобы оценить нагрузку системы используется интервал в 5 секунд и учитываются как те процессы, которые уже что-то потребляют, так и те, которым не хватило тика, чтобы завершить нужные вычисления. Если процесс за указанные 5 секунд использовал все тики, чтобы выполнить свои вычисления и очередь из процессов не образовалась, то ты говорим про 100%-тную загрузку процессора. По другому, мы можем сказать, что load average равен 1. Сравним это описание с тем, что происходит в магазине - вы берете товар, подходите на кассу и в течение определенного времени (тика) продавец вас обслуживает. В реальной жизни ситуация чуть иная и всегда в магазине есть очередь, кто-то в ней оставляет мужа и продолжает покупки, у кого-то на кассе нет нужной суммы на карте и так далее.

Load average показывает отношение имеющихся запросов на вычислительные ресурсы к количеству этих самых ресурсов (тиков). Для любого одноядерного процессора (будь то Intel последнего поколения или старенький Celeron) использование всех имеющихся ресурсов означает, что load average равен 1. Если количество ядер процессора увеличилось в 2 раза, то увеличилось и количество ресурсов, которые можно предложить процессам для вычислений. В такой ситуации load average равняется 2, а значит и производительность выше, верно? Но, средняя загрузка это не тоже самое, что и производительность, так как оба ядра сделают одинаковое количество тиков. То есть, второе ядро не повысит производительность, но позволит обработать вдвое большее количество запросов (операций).

Надеюсь, что описанное выше позволило вам понять что такое load average и в чем суть этого явления.

Как узнать load average для сервера?

Первым простым способом проверки load average является использование команды uptime, которая покажет общее время активности машины и нужные нам данные.

-2

Второй способ это использовать консольные утилиты для просмотра сведений о системе. Например, про некоторые из них я рассказывал в статье про проверку состояния оперативной памяти. Скриншот ниже получен в утилите htop.

-3

Пять команд для проверки оперативной памяти в Линукс

«Выхлоп» показывает нам три значения, которые соответствуют загрузкe процессора на трех временных отрезках - 1, 5 и 15 минут. Цифры показывают не усредненное значение, они отражают экспоненциально взвешенную скользящую среднюю. Это показатель, который активно используется в математической статистике и позволяет отбросить при фиксации незначительные отклонения в значениях и сосредоточиться на том, что действительно отражает динамику. Вещь наверняка полезная, так как например применяется в финансовом анализе, но в рамках статьи останавливаться на этом не будем, просто примем к сведению, что это не средние показатели нагрузки.

Эксперименты показали, что истинные значения для load average за 1 минуту система начинает показывать спустя 4 минуты работы, для load average на отрезке 5 минут за 20 минут работы, для load average в 15 минут такое значение получается через час или полтора. Что это значит на практике? Значение load average 1 дает нам данные о том, как система была нагружена несколько минут назад, load average 5 - о том, как система ощущала себя полчаса назад, а load average 15 сообщает о нагрузке несколько часов назад.

Оцениваем показатели и делаем выводы

Вооружившись информацией полученной выше мы можем с легкостью проанализировать значения, получаемые командой uptime или через утилиту htop.

Нормальные показатели могут быть больше 1 на одно ядро процессора для load average 1, не могут быть выше 1 для load average 5 и должны быть не больше 0,7-0,8 для load average 15. Чтобы узнать количество процессоров в ядре и верно соотнести полученные данные с цифрами используйте команды nproc или cat /proc/cpuinfo | grep "cpu cores"

-4

Например, вы получаете следующее значение для одноядерного процессора: 0.99 0.75 0.35. Это говорит о том, что в течение последних минут был всплеск нагрузки, но ресурсов системы хватает, чтобы с этой нагрузкой справится.

Представим, что терминал показал для все того же процессора значения load average в 0.00 0.36 0.59. Делаем вывод о том, что в течение полутора часов система испытывала определенные нагрузки.

Если на четырехъядерном процессоре показатели load average составляют 4.55 4.22 4.18 то это говорит о том, что процессор уже несколько часов работает на пределе возможностей и с этим нужно что-то делать (говоря проще, искать тот процесс или процессы, которые потребляют системные ресурсы).

Подведем итог

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

Если материал был для вас полезен и объяснил то, что вы раньше могли знать, но не понимали, то поддержите его лайком. Непонятные моменты можете писать в комментариях, где я и другие подписчики попытаемся помочь и объяснить. Также не забываем про обновления канала в Телеграм, на которые можно подписаться, чтобы получать уведомления о выходе новых постов раньше, чем их отправит Дзен. Поддержать канал материально вы можете перейдя на платежную форму по ссылке (там идет сбор на покупку видеокарты от AMD).