Load average, load average... Что это вообще за показатель? В этой статье разберемся почему он важен и как им управлять.
Каждый раз, когда обнаруживается снижение производительности системы, первое, что обычно делается для диагностики — это запуск команд top или uptime, чтобы понять нагрузку на систему, например:
Последние три числа в это выводе — это Load Average за последние 1 минуту, 5 минут и 15 минут.
Кто-то считает, что load average — это загрузка CPU в единицу времени, например, средняя загрузка: 0,51, 0,72, 0,86 означает, что загрузка CPU составляет 51% за последнюю 1 минуту. Но это не так. Средняя загрузка относится к среднему количеству процессов, находящихся в запущенном и непрерывном состоянии в единицу времени, то есть к среднему количеству активных процессов, которое не связано напрямую с использованием CPU.
Runnable state (запускаемое состояние)
Процесс в статусе runnable относится к процессу, который использует CPU или ожидает CPU, то есть процесс в состоянии R (выполняется или готов к выполнению). Такой процесс будет виден в выводе команды ps.
Uninterruptible State (непрерываемое состояние)
Непрерываемый процесс — это процесс, находящийся в ядре. Наиболее распространенным случаем является ожидание ответа ввода-вывода аппаратного устройства, статус D (Disk Sleep), который есть в выводе команды ps. Например, когда процесс читает и записывает данные на диск, чтобы обеспечить согласованность данных, он не может быть прерван другими процессами или прерываниями до получения ответа с диска. В это время процесс находится в непрерываемом состоянии.
Следовательно, непрерываемое состояние является защитным механизмом для системы при работе с аппаратными устройствами. Получается, что средняя загрузка на самом деле является средним количеством активных процессов. Таким образом, в идеале, на каждом ядре процессора должен быть запущен ровно один процесс, чтобы каждое ядро было полностью загружено. Но как объяснить значение load average равное 2?
В системе с 2 CPU значение load average равное 2, означает, что все CPU полностью заняты;
В системе с 4 CPU load average равное 2 означает, что 50% CPU простаивают.
В системе с 1 CPU load average равное 2, означает, что CPU перегружен, и половина процессов не может конкурировать за процессоры мощности.
Вернемся к первому примеру. Как же связан load average с нагрузкой на систему? Известно, что идеальное значение load average должно равняться количеству процессоров. Таким образом, при оценке нагрузки на систему первое, что нужно знать — это количество CPU в системе, которое можно получить с помощью команды top или из /proc/cpuinfo:
$ grep 'model name' /proc/cpuinfo | wc -l 2
$ top (then press 1) 2
$ nproc 2
При превышении load average количества CPU, система является перегруженной. Но возникает другой вопрос, у load average есть три значения, на какое из них нужно ориентироваться? Среднее значение трех разных временных интервалов предоставляет источник данных для анализа тенденции загрузки системы, позволяя более полно понять текущую ситуацию с нагрузкой.
Если значения за 1 минуту, 5 минут и 15 минут одинаковы, это означает, что загрузка системы стабильна.
Если значение за 1 минуту намного меньше значения за 15 минут, это означает, что за последнюю минуту нагрузка на систему снизилась, но в последние 15 минут была большая нагрузка.
Если значение за 1 минуту намного больше значения 15 минут, это означает, что нагрузка увеличивается.
Как только 1-минутная средняя нагрузка близка к числу CPU или превышает его, это означает, что в системе возникла перегрузка. В это время необходимо проанализировать и выяснить, в чем причина проблемы, и найти способы оптимизации системы.
Давайте теперь посмотрим на другой пример. Предположим, load average равен 1,73, 0,60, 7,98 на однопроцессорной системе, что означает, что за последнюю минуту система перегружена на 73%, а за 15 минут — на 698%, загрузка системы уменьшается.
Когда средняя нагрузка на 70% превышает количество CPU, следует проанализировать и устранить проблему высокой нагрузки. Если нагрузка слишком высока, это может привести к медленному отклику процесса, что повлияет на нормальную работу службы.
В реальном мире понятия load average и зарузка процессора часто не связаны. Давайте разберемся. Можно задаться вопросом: т.к. load average представляет количество активных процессов, если значение load average высоко, не означает ли это, что и загрузка CPU высока?
Load average относится к числу процессов, находящихся в состоянии готовности к выполнению и в состоянии бесперебойной работы в единицу времени. Таким образом, этот показатель включает не только процессы, использующие CPU, но и процессы, ожидающие CPU и ввода-вывода.
Использование CPU представляет собой статистику занятости CPU в единицу времени и не обязательно соответствует средней нагрузке. Например:
Процессы с интенсивным использованием CPU, использующие много процессорного времени, приведут к увеличению средней нагрузки, и в настоящее время они совпадают;
Процессы с интенсивным вводом-выводом, ожидающие ввода-вывода, также приведут к увеличению средней нагрузки, но загрузка CPU не обязательно будет высокой;
Большое количество запланированных процессов, ожидающих CPU, также приведет к увеличению средней нагрузки, а загрузка CPU в это время будет относительно высокой.
Если вы собираете значение load average в вашу систему мониторинга, то можете оперативно понять текущее состояние и, самое главное, тренд по производительности.
Спасибо за внимание!
Если вам нужна помощь с мониторингом, мы оказываем консультации и выполняем полноценные проекты по внедрению систем мониторинга. Например, Zabbix.