Load average в Linux

Load average — показатель средней загруженности системы Linux. Из статьи вы узнаете что можно узнать о системе смотря на этот показатель.

Что такое Load Average

Load Average (LA) — это показатель, который показывает среднюю нагрузку на сервер за определённый период времени. Чем его значение ниже, тем ниже нагрузка на сервер. В системах Linux этот показатель автоматически рассчитывается за 1, 5 и 15 минут ядром системы.

Под средней нагрузкой на сервер понимают суммарную нагрузку процессами на центральный процессор и подсистему ввода/вывода за определённый промежуток времени.

Этот показатель может сказать нам, когда наш сервер хорошо нагружен, совсем не нагружен или нагружен слишком сильно. Также, смотря на него можно понять, растёт ли нагрузка, снижается, или остаётся без изменений.

Как посмотреть Load Average

Вы уже должны быть знакомы с Load Average. Его значение за 1 минуту, за 5 минут и за 15 минут показывают уже рассмотренные ранее утилиты top и htop.

Утилита top - load average
Утилита top — load average
Утилита htop — load average

Также вы можете увидеть этот показатель выполнив команду uptime:

alex@deb-11:~$ uptime
 11:50:56 up 8 days, 22:25,  1 user,  load average: 0,01, 0,01, 0,00

И ещё, вы можете прочитать информацию из файла /proc/loadavg:

alex@deb-11:~$ cat /proc/loadavg
1.00 1.00 1.00 2/130 15013

Первые три числа это значение Load Average.

Четвертое поле состоит из двух чисел, разделенных косой чертой. Первое из них — это количество выполняющихся в данный момент процессов. Значение после косой черты — это количество процессов, которые в настоящее время существуют в системе.

Пятое поле — это PID процесса, который был создан в системе последним.

Как рассчитывается Load Average

Максимальным пределом для Load Average обычно считается количество ядер на сервере, которые способны обрабатывать процессы. Например, если на сервере суммарно 16 ядер, то одновременно на нём может выполняться 16 процессов. И это означает, что если:

  • LA < 16, значит всё хорошо.
  • LA = 16, значит сервер работает без задержек, но запаса на нём уже нет.
  • LA > 16, процессам приходится ждать, значит сервер будет работать с задержками.

Какие же процессы нагружают систему:

  • которые уже обрабатываются на процессоре (running);
  • только готовые обрабатываться (runnable);
  • обратившиеся к подсистеме ввода/вывода и читающие или пишущие туда информацию (uninterruptible sleep).

Первые два вида процессов — это нагрузка на процессор, а последний — это нагрузка на подсистему ввода вывода (обычно нагрузка на диск или сетевой ресурс).

Напомню, что процессы, которые обрабатываются на процессоре, или готовы обрабатываться в выводе ps обозначаются статусом R (running or runnable). А процессы в состоянии uninterruptible sleep обозначаются буквой D. Посмотреть такие процессы в определённый момент времени, можно выполнив команду:

alex@deb-11:~$ ps ax -o pid,comm,state | egrep 'D$|R$'
  14758 md5sum          R
  14816 ps              R

А если хотите понаблюдать за изменениями, то воспользуйтесь утилитой watch:

alex@deb-11:~$ watch "ps ax -o pid,comm,state | egrep 'D$|R$'"

Every 2,0s: ps ax -o pid,comm,state | egrep R || D                                               deb-11: Wed Oct  5 14:08:08 2022

  14758 md5sum          R
  14850 ps              R
  14851 sh              R

И не забывайте что Load Average — это среднее значение. Представим что за минуту процессор обработает 5 циклов (это не примерно, так просто легче считать):

  • 1 цикл — 2R
  • 2 цикл — 5R
  • 3 цикл — 2R + 1D
  • 4 цикл — 16R
  • 5 цикл -2R

Получается что в этом случае LA = (2 + 5 + 3 + 16 + 2) / 5 = 5,6. Для 16 ядерного процессора, вполне нормально. Но для 4 ядерного — плохо.

Как анализировать его значение

Load Average показывает 3 числа. Первое это средняя нагрузка за 1 минуту, второе — за 5 минут, а третье — за 15 минут. Поэтому, если первое число больше чем второе и третье, значит нагрузка в данный момент растёт. И наоборот, если третье число самое большое, второе поменьше, а первое ещё меньше — значит нагрузка на сервере была высокой, но уже упала.

Примеры:

  • 6,15 5,6 3,2 — нагрузка растет;
  • 2,02 5,13 8,52 — нагрузка падает;
  • 3,18 3,25 3,20 — нагрузка почти не меняется.

Если значение LA меньше чем число ядер, значит сервер справляется со своими задачами. При этом могут быть недолгие колебания, когда LA становится больше числа ядер.

А если Load Average, на протяжении всей работы сервера, равен количеству ядер сервера. Это значит, что сервер работает на пределе, но при этом справляется со своей работой. Проблема в этом случае заключается только в том, что нет запаса по производительности. Какое-то приложение на сервере обновится, или вы установите новое приложение и сервер начнёт подтормаживать. Поэтому, в этом случае, можно уже подумать над оптимизацией или апгрейдом сервера.

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

Также, бывают ситуации, при которых Load Average может резко начать подниматься. Например, LA может быть постоянно в районе 6, и вдруг поднимется до 100. Обычно такое случается, когда на сервере что-то пошло не по плану. Например, сервер обращается к сетевому ресурсу, а тот недоступен, при этом процессы уходят в состояние uninterruptible sleep, тем самым повышая LA.

Итог

Мы познакомились поближе с определением Load Average для Linux систем. Узнали как смотреть это значение и как анализировать нагрузку на сервер.


Оставьте комментарий