Linux: CPU Load – когда пора волноваться или что значит Load Average

By | 05/14/2014
 

linux_logoСкорее всего – вы уже знакомы с понятием Load Average. LA представляет собой три числа, которые отображаются в утилитах uptime и top, и выглядят примерно так:

load average: 0.09, 0.05, 0.01

Большинство людей знают, что обозначают эти цифры: они отображают среднюю нагрузку за определённое время (1, 5 и 15 минут), и знают, что чем меньшее значение – тем лучше. Большие же значения означают какие-то проблемы с нагрузкой на процессор. Но – какой порог? как выглядит “хорошее” и “плохое” значение Load Average? Когда начинать беспокоиться – а когда пора уже паниковать и срочно фиксить проблему?

Для начала – давайте рассмотрим, что именно обозначает Load Average. Начнём с простого примера – машина с одноядерным процессором.

Пример с движением по дороге

Одноядерный процессор можно представить себе как дорогу с однополосным движением. Представьте себе, что вы – оператор моста, по которому проходит эта дорога. Иногда движение по ней такое интенсивное, что машины выстраиваются в очередь для переезда. Вы хотите, что бы водители знали – какова скорость прохождения машин по вашему мосту. Самое простое решение – определить, сколько машин уже ожидают очереди на переезд моста: если машин в очереди нет – то водители будут знать, что могут проехать без проблем, а если машины скапливаются в очереди на подъезде к мосту – водители будут видеть, что им придётся простоять в этой очереди.

И так, оператор – какую систему измерения вы выберете? Как на счёт такой:

  • 0.00 означает что движения по мосту нет вообще. В действительности – значения между 0.00 и 1.00 будет обозначать, что очереди нет и движение свободно;
  • 1.00 означает, что мост уже занят практически на полную пропускную способность. Всё ещё в порядке, но если движение ещё немного увеличится – то продвижение машин уже замедлится;
  • свыше 1.00 уже означает образование очереди. Насколько большая? Например, 2.00 будет обозначать, что заняты две полосы – одна уже на мосту, и одна – на подъездной дороге. 3.00 означает, что заняты уже три полосы – одна на самом мосту, и две – в очереди на дороге.

lda_0_5= load of 0.50

lda_1_0= load of 1.00

lda_1_7= load of 1.70

Это пример того, чем является загрузка процессора. “Машины” тут – процессы, занимающие процессорное время (“переезжают мост“), или стоящие в очереди на подъезде к нему. UNIX считает загрузку, как “длина в очереди на выполнение“: сумма процессов, которые в настоящие момент выполняются + количество процессов в очереди на обработку:

Tasks: 213 total,   1 running, 212 sleeping,   0 stopped,   0 zombie

Как оператор моста, вы бы хотели, что бы машины (процессы) никогда не стояли в очереди. Так же и ваш процессор, в идеале, должен оставаться ниже 1.00. Так же, вы можете быть спокойны, если иногда возникают пики немного выше 1.00 – но вы должны начинать волноваться, если это происходит постоянно.

Так что – Load Average 1.00 является идеальным показателем?

Не совсем. Проблема нагрузки 1.00 в том, что у вас не остаётся “просвета” (запаса). На практике, многие системные администраторы придерживаются оптимального значения в 0.70:

  • Пора обратить внимание“: полезное правило 0.70 – если Load Average постоянно выше 0.70 – время искать причину прежде, чем это станет настоящей проблемой;
  • Пора исправлять это“: полезное правило 1.00 – если Load Average становится выше 1.00 – найдите причину и исправьте её уже сейчас. В противном случае – вы рискуете быть разбуженным среди ночи – и ничего прикольного в этом уже не будет;
  • “Чёрт, 3 часа ночи – WTF?“: полезное правило 5.00 – если Load Average становится выше 5.00 – у вас могут быть серьёзные проблемы, и ваша машина либо уже зависла, либо уже работает намного медленнее, и это случится (неожиданно!) в самое неподходящее время, например – среди ночи или во время конференции. Не позволяйте этому произойти.

А как на счёт многоядерных процессоров? У меня Load Average 3.00 – но всё работает отлично!

У вас четырёхъядерный процессор? Тогда – Load Average в 3.00 совершенно нормальное значение.

На многоядерных процессорах значение LA взаимосвязано с количеством процессоров.  Использование на 100% отображается как 1.00 на одноядерной системе, 2.00 на двухъядерной, 4.00 на четырёх и так далее.

Если мы вернёмся к аналогии с мостом, то 1.00 значит, что одна полоса движения на мосту полностью занята. На мосту с одной полосой – это и будет 100% его “пропускной способности”. На двухполосном мосту – это уже 50%, т.к. только одна полоса занята полностью – но есть ещё одна, полностью свободная.

То же самое и с процессором – нагрузка в 1.00 будет 100% на одноядерной системе, а на двухъядерной – значение 2.00 будет 100% нагрузки.

Многоядерность vs  многопроцессорность

Раз уж мы затронули эту тему – давайте поговорим о разнице между многоядерными и многопроцессорными системами. С точки зрения производительности – равна ли машина с одним двухъядерным процессоров – машине с двумя процессорами по одному ядру? Грубо говоря – да. Есть много тонкостей, связанных с кешированием, передачей процессов между процессорами и так далее. Несмотря на это, в целях вычисления итоговой нагрузки на процессор(ы) – важно общее количество ядер, независимо от того, на сколько физических процессоров они распределены.

Это приводит нас к ещё двум правилам:

  • Количество ядер = максимальной нагрузке“: на многоядерных системах, Load Average не должен превышать количество ядер;
  • Ядра есть ядра“: не важно, как распределены ядра по процессорам. Два четырёхъядерных процессора == четырём двухъядерным == восьми одноядерным процессорам.

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

Давайте посмотрим на Load Average в выводе утилиты uptime:

# uptime
23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36

Это двухъядерный процессор, значит у нас имеется большой запас производительности, и можно даже не задумываться о нагрузке, пока значение не достигнет хотя бы 1.7.

Далее, как на счёт остальных значений? 0.65 значит нагрузку за последнюю минуту, 0.42 – за последние 5 минут и 0.36 – за прошедшие 15 минут. Это приводит нас к вопросу:

За каким именно значением наблюдать? 1, 5 или 15 минут?

Помня правила, которые мы обсудили (1.00 == “Пора исправлять это“) – вам необходимо обращать внимание на значения 5 и 15 минут. Т.е., если на вашей машине бывают пики нагрузки за 1 минуту – это нормально. Если же значение 15-ти минут поднимается выше 1.00 и остаётся таким – пора заняться этим вопросом (конечно, учитывая момент, касающийся количества ядер в системе).

Значит, количество ядер в системе важный вопрос для выяснения реальной нагрузки. Как мне узнать – сколько ядер в моей системе?

Выполните:

# cat /proc/cpuinfo

так вы получите полную информацию о процессоре(ах).

А что бы получить просто число, без другой информации – выполните:

# grep 'model name' /proc/cpuinfo | wc -l
16

Оригинал статьи взят отсюда>>>.  Замечания/предложения к переводу категорически приветствуются.