Скорее всего — вы уже знакомы с понятием 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 означает, что заняты уже три полосы — одна на самом мосту, и две — в очереди на дороге.
= load of 0.50
= load of 1.00
= 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
Оригинал статьи взят отсюда>>>. Замечания/предложения к переводу категорически приветствуются.