loremOS Admin

"Системное администрирование – это культура"

LA в Linux

Опубликовано 6th Nov 2018 21:29:32 в категории Linux

Здравствуй, дорогой друг! Наверняка ты видал подобные строки load average: 1,67, 1,63, 1,56 в консоли, в htop, неважно где. Но далеко не все знают, что оно на самом деле означает. 

Если кратко, то LA - это средние значения нагрузки, как правило, на процессор. Сами числа - это средние значения нагрузки для 1, 5 и 15 минут. Но вот в чем заключается отличие для Linux: это средние значения нагрузки на систему. То есть, это количество выполняемых потоков и ожидающих своей очереди (диск,процессор), то есть учитывается потребность в разных ресурсах. 

По набору из трёх значений можно оценить динамику нагрузки. Но здесь кроется проблема. Что лучше или хуже:

load average: 1,75, 1,91, 1,74

или

load average: 0,14, 0,12, 0,06

Для понимания следует детально рассмотреть работу ЦП. Независимо от того, мощный ЦП или нет, многоядерный или нет, он выполняет какой-то программный код для каких-то процессов. Если процесс один, то вопросов здесь нет, но когда их несколько? Необходимо как-то распределять ресурсы между ними и равномерно, чтобы один процесс, дойдя до ЦП, не оставил без вычислений другие. Аналогия: один компьютер в доме большой семьи. Семья договаривается о времени, когда каждый может "посидеть за компом", например по 15 минут. ЦП поступает полностью аналогичным образом. Каждому процессу, нуждающемуся в вычислениях, выделяется некий промежуток времени, который зависит от типа процессора и системы. Называется он тиком. Каждый тик процессорное время отдается какому-то одному процессу в порядке очереди, но если процесс имеет повышенный или пониженный приоритет, то он, соответственно получит большее или меньшее количество тиков. 

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

Таким образом, Load average показывает отношение имеющихся запросов на вычислительные ресурсы к количеству этих самых ресурсов (тиков). Для одного процессора (одного процессорного ядра) использование всех имеющихся ресурсов обозначает load average = 1. При появлении второго ядра у нас появляются дополнительные вычислительные ресурсы - 500 тиков. Но за эти 500 тиков система уже может обработать уже 1000 запросов, что покажет нам load average = 2. При 3 ядрах = 3, и так далее. 

А напоследок, про три числа. Первое представляет собой недавнее прошлое (несколько минут назад), второе - прошлое (полчаса-час) и третье - отдаленное прошлое (несколько часов). Предположим, что у нас 4-х ядерный ЦП. Рассмотрим примеры:

load average: 3,99, 2,63, 1,56

- говорит о том, что имеет место достаточно кратковременный (около десятка минут) всплеск нагрузки, при этом вычислительных ресурсов на данный момент достаточно

load average: 0,03, 3,37, 3,89

- говорит о том, что не так давно система испытывала значительные нагрузки в течении довольно продолжительного времени (полчаса-час).

load average: 4,85 4,52 4,48

- говорит о том, что ЦП работает на пределе своих возможностей в течении длительного времени (несколько часов). 

Первое число может превышать 1,00 для одного ядра, свидетельствуя о кратковременной пиковой нагрузке на систему.
Второе число - не должно превышать 1,00 для одного ядра, иначе это недостаток вычислительных ресурсов (см.выше про то, что это может быть НЕ ТОЛЬКО ЦП, но и результат ожидания disk IO).
Третье число - максимальное значение 0,7 - 0,8 для одного ядра, но в любом случае не выше 1,0 на ядро, в противном случае - беда, можно получить много половых сношений. 

Надеюсь, не запутал? :)

 

З.Ы.: рекомендую отличную тулзу для мониторинга - Glances

Всего доброго.

 

 


Поделиться:


Теги