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