Load average, load average... Что это вообще за показатель? В этой статье разберемся почему он важен и как им управлять.
Каждый раз, когда обнаруживается снижение производительности системы, первое, что обычно делается для диагностики — это запуск команд top или uptime, чтобы понять нагрузку на систему, например:
$ uptime
01:43:15 up 3 days, 22:17, 1 user, load average: 0.51, 0.72, 0.86
Последние три числа в это выводе — это Load Average за последние 1 минуту, 5 минут и 15 минут.
Кто-то считает, что load average — это загрузка CPU в единицу времени, например, средняя загрузка: 0,51, 0,72, 0,86 означает, что загрузка CPU составляет 51% за последнюю 1 минуту. Но это не так. Средняя загрузка относится к среднему количеству процессов, находящихся в запущенном и непрерывном состоянии в единицу времени, то есть к среднему количеству активных процессов, которое не связано напрямую с использованием CPU.
Процесс в статусе runnable относится к процессу, который использует CPU или ожидает CPU, то есть процесс в состоянии R (выполняется или готов к выполнению). Такой процесс будет виден в выводе команды ps.
Непрерываемый процесс — это процесс, находящийся в ядре. Наиболее распространенным случаем является ожидание ответа ввода-вывода аппаратного устройства, статус D (Disk Sleep), который есть в выводе команды ps. Например, когда процесс читает и записывает данные на диск, чтобы обеспечить согласованность данных, он не может быть прерван другими процессами или прерываниями до получения ответа с диска. В это время процесс находится в непрерываемом состоянии.
Следовательно, непрерываемое состояние является защитным механизмом для системы при работе с аппаратными устройствами. Получается, что средняя загрузка на самом деле является средним количеством активных процессов. Таким образом, в идеале, на каждом ядре процессора должен быть запущен ровно один процесс, чтобы каждое ядро было полностью загружено. Но как объяснить значение load average равное 2?
Вернемся к первому примеру. Как же связан 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 есть три значения, на какое из них нужно ориентироваться? Среднее значение трех разных временных интервалов предоставляет источник данных для анализа тенденции загрузки системы, позволяя более полно понять текущую ситуацию с нагрузкой.
Давайте теперь посмотрим на другой пример. Предположим, 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 в единицу времени и не обязательно соответствует средней нагрузке. Например:
Если вы собираете значение load average в вашу систему мониторинга, то можете оперативно понять текущее состояние и, самое главное, тренд по производительности.
Спасибо за внимание!
Если вам нужна помощь с мониторингом, мы оказываем консультации и выполняем полноценные проекты по внедрению систем мониторинга. Например, Zabbix.