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

Автор: | 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

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