CPU Load коли починати хвилюватися

Ця нотатка є перекладом статті з блогу компанії Scout. У статті дається просте та наочне пояснення такого поняття, як load average. Стаття орієнтована на Linux-адміністраторів-початківців, але, можливо, буде корисна і більш досвідченим адмінам. Ті, хто зацікавився, ласкаво просимо під кат.

Ймовірно, Ви вже знайомі з поняттям load average. Load average — це три числа, що відображаються під час виконання команд top та uptime . Виглядають вони приблизно так:

Більшість інтуїтивно розуміють, що ці три числа позначають середні значення завантаження процесора на тимчасових проміжках, що прогресивно збільшуються (одна, п'ять і п'ятнадцять хвилин) і чим менше їх значення — тим краще. Великі числа свідчать про занадто велике навантаження на сервер. Але які значення вважати граничними? Які значення є «поганими», а які «хорошими»? Коли Вам слід просто хвилюватися про закінчення середнього завантаження, а коли слід кидати інші справи і вирішувати проблему так швидко, як це можливо? Для початку, давайте розберемося, що означає load average . Розглянемо найпростіший випадок: припустимо, що у нас є один сервер з одноядерним процесором.

Аналогія транспортного потоку

Одноядерний процесор схожий дорогу з однією смугою руху. Уявіть собі, що Ви керуєте рухом машин мостом. Іноді Ваш міст завантажений настільки сильно, що машинам доводиться чекати в черзі щоб проїхати по ньому. Ви хочете дати людям зрозуміти, як довго їм доведеться чекати, щоб перебратися на інший бік річки. Хорошим способом зробити це буде показати як багато машин чекають у черзі в конкретний момент часу. Якщо машин у черзі немає, водії, що під'їжджають, знатимуть, що вони відразузможуть проїхати мостом. Інакше вони розумітимуть, що доведеться чекати своєї черги. Отже, Керуючий Містом, яку систему позначень Ви будете використовувати? Як щодо такої:

  • 0.00 означає, що на мосту немає жодної машини. Фактично, закінчення від 0.00 до 1.00 означають відсутність черги. Машина, що під'їжджає, може скористатися мостом без очікування;
  • 1.00 означає, що на мосту знаходиться стільки автомобілів, скільки він може вмістити. Досі йде добре, але, у разі збільшення потоку машин, можливі проблеми;
  • Значення, що перевищують 1.00, означають наявність черги на в'їзді. Наскільки великий? Наприклад, значення 2.00 показує, що у черзі коштує стільки ж автомобілів, скільки рухається мостом. 3.00 означає, що міст повністю зайнятий і в черзі чекає вдвічі більше машин, ніж може вмістити. І так далі.

load average = 1.00 load average = 0.50 load average = 1.70 Ось базове значення завантаження процесора. Машини обробляються з використанням проміжків процесорного часу (перетинають міст), або ставляться в чергу. У Unix це називаєтьсядовжина черги виконання: кількість всіх процесів, що виконуються в даний момент часу, плюс кількість процесів, що очікують у черзі. Вам, як керуючому мостом, хотілося б, щоб машини-процеси ніколи не чекали у черзі. Таким чином, переважно, щоб завантаження процесора була завжди нижче 1.00. Періодично можливі сплески трафіку, коли завантаження перевищуватиме 1.00, але якщо воно постійно перевищує дане значення - це привід почати хвилюватися.

Так Ви кажете, 1.00 – ідеальне значення load average?

Не зовсім. Проблема зі значенням 1.00 у тому, що у Вас не залишається запасу. напрактиці, багато системних адміністраторів проводять межу на позначці 0.70:

  • Практичне правило «Потрібен нагляд»: 0.70. Якщо середнє значення завантаження постійно перевищує 0.70, слід з'ясувати причину такої поведінки системи, щоб уникнути проблем у майбутньому;
  • Практичне правило «Починай це негайно!»: 1.00. Якщо середнє завантаження системи перевищує 1.00, необхідно терміново знайти причину та усунути її. В іншому випадку, Ви ризикуєте бути збудженим посеред ночі і це точно не буде весело;
  • Практичне правило «Щас же 3 ночі. ШОЗАН. »: 5.00. Якщо середнє завантаження процесора перевищує 5.00, у Вас серйозні проблеми. Сервер може підвисати чи працювати дуже повільно. Швидше за все, це станеться найгіршим з можливих моментів. Наприклад, серед ночі або коли Ви виступаєте з доповіддю на конференції.

Що щодо багатопроцесорних систем? Мій сервер показує завантаження 3.00 та все ОК!

У Вас є чотирипроцесорна система? Все гаразд, якщо load average дорівнює 3.00. У мультипроцесорних системах завантаження обчислюється щодо кількості доступних процесорних ядер. 100% завантаження позначається числом 1:00 для одноядерної машини, числом 2:00 для двоядерної, 4:00 для чотириядерної і т.д. Якщо повернутись до нашої аналогії з мостом, 1.00 означає «одну повністю завантажену смугу руху». Якщо на мосту всього одна смуга, 1.00 означає, що міст завантажений на 100%, якщо ж є дві смуги, він завантажений лише на 50%. Те саме з процесорами. 1.00 означає 100% завантаження одноядерного процесора. 2.00 - 100% завантаження двоядерного і т.д.

Багатоядерність vs. багатопроцесорність

Що краще: один процесор із двома ядрами чи два окремі процесори? З точки зору продуктивності, обидваці рішення приблизно рівні. Так, приблизно. Тут існує безліч нюансів, пов'язаних із величиною кешу, перемикання процесів між процесорами тощо. Незважаючи на це, єдиною важливою для зміни завантаження системи характеристик є загальна кількість ядер незалежно від того, на скільки фізичних процесорах вони знаходяться. Що призводить до ще двох практичних правил:

  • "Кількість ядер = максимальне завантаження". На багатоядерній системі завантаження не повинно перевищувати кількості доступних ядер;
  • "Ядра - вони і в Африці ядра". Те, як ядра розподілені процесорами — неважливо. Два чотириядерні = чотири двоядерні = вісім одноядерних процесорів. Має значення лише загальна кількість ядер.

Зведемо всі разом

Давайте подивимося на середні значення завантаження за допомогою команди uptime:

Тут представлені показники для системи з чотириядерним процесором і ми бачимо, що є великий запас навантаження. Я навіть не замислюватимусь про неї, поки load average не перевищить 3.70.

Яке середнє значення слід контролювати? Для однієї, п'яти чи 15 хвилин?

Для значень, про які ми говорили раніше (1.00 - полагодь це негайно і т.д.), слід розглядати часові проміжки в п'ять і 15 хвилин. Якщо завантаження Вашої системи перевищує 1.00 на інтервалі за одну хвилину, все гаразд. Якщо завантаження перевищує 1.00 на п'яти- або 15-хвилинному інтервалі, Вам слід почати вживати заходів (звичайно, Вам слід також брати до уваги кількість ядер у Вашій системі).

Кількість ядер важлива для правильного розуміння load average. Як мені його впізнати?

Команда cat /proc/cpuinfo виводить інформацію про всі процесори у вашій системі. Щоб дізнатися кількість ядер, «скорміть» їївисновок утиліть grep :

Примітки перекладача