Найти в Дзене
Записки сисадмина

Linux. Load average. Простыми словами о загрузке процессора.

Оглавление

Есть такая шутка: «1 монитор - джун, 2 монитора - мидл, 3 монитора - сеньор, 4 монитора - охранник». А знаете, что общего у джуна и охранника? Вроде все видит, а ничего сделать не может.

Ладно, шутки сегодня не идут, зато очень хорошо идет стучание по клавиатуре.

Мы уже говорили про оперативную память, говорили про процессы в linux. А значит, пора затронуть тему процессорного времени.

Вот если тебя попросят лаконично рассказать, чем занимается процессор, что ты ответишь? Правильно - он считает.

Считает, что тебе надо подписаться и прочитать другие мои статьи.

А что процессор постоянно обсчитывает? Данные из процессов.

Представь себя с калькулятором: вот ты - это процесс, калькулятор - ядро процессора. Ты ввел какие-то числа, указал, что с ними сделать, а калькулятор вернул тебе результат. Вот если очень грубо - так это и работает.

А представь, что калькулятор не сразу дал тебе ответ, а немного задумался. Вот все время, которое он занимался твоей задачей - это процессорное время.

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

-2

Есть утилиты, которые позволяют оценить загрузку в системе в режиме реального времени, даже без подключенного мониторинга. Самые популярные - top и его цветной брат htop.

Какие данные мы получаем из top.

Поехали разбираться, что они нам вообще показывают, и что нам с этой информацией делать.

-3

В строке tasks находится краткая сводка по всем процессам в системе. Про статусы вы можете еще раз почитать здесь.

%Cpu(s) - сводка по утилизации нашего процессора.

Что же означают эти цифры и буквы:

  • us - user. Какой процент времени процессор обрабатывает процессы пользователей.
  • sy - system. Какой процент времени процессор обрабатывает системные процессы.
  • ni - nice. Время, потраченное на процессы с низким приоритетом.
  • id - idle. Процент времени простоя. Если значение больше 70, считается, что система спроектирована неправильно и процессор абсолютно не нагружен.
  • wa - wait. Ожидание данных с устройства ввода-вывода (если диск будет очень медленным, этот параметр будет расти)
  • hi - hardware interruption. Аппаратные прерывания. Зачастую, увеличение этого параметра сигнализирует об ошибках аппаратуры (периферийных устройств).
  • si - system interruption. Системные прерывания. Время, потраченное службами системы на чтение и запись.
  • st - stolen. Украденное процессорное время. Актуально для виртуальных машин. Если гипервизор перегружен, на виртуальной машине будет расти этот параметр.

Все значения этих параметров указаны в процентах по отношению к всему процессору, вне зависимости от количества ядер и потоков.

Считается, что показатель idle ниже 10 свидетельствует от перегрузке процессора, а выше 70 - о простое.

Про строки памяти мы уже разговаривали, повторно разбирать их не вижу смысла.

Поговорим про load average.

Load average - метрика, которая отображает среднюю нагрузку на процессор в системе за определенные промежутки времени. Всегда выводится три значения: за последнюю минуту, 5 и 15 минут.

Считается, что LA - это загруженность процессора. Но не все так однозначно.

-4

Load average относителен, как и все в нашем бренном мире. Конкретнее - он относителен к количеству виртуальных ядер процессора.

Вернемся к нашим примерам с калькулятором:

Если твою задачу калькулятор будет считать целую минуту, то за эту минуту LA будет равен 1. Это значит, что ты загрузил задачей одно ядро на минуту на 100%.

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

-5

Как так получилось, что на виртуалке с 2 ядрами LA выше 900, а она все еще работает? Магия? Не совсем.

Технически, Load average показывает, сколько процессов требует процессорного времени в среднем за указанные интервалы. Если значение превышает количество ядер, это может указывать на очередь процессов, которые ожидают своей обработки. Сложно? Давайте упростим.

Ты все еще сидишь с калькулятором, он всю минуту пытается посчитать твою задачу. В это время твой друг тоже стоит в очереди к калькулятору. Но он пока что не решил, что будет считать, он просто занял очередь. В этом случае LA будет 2, но с калькулятором (процессором) ничего страшного не случится.

Показатель Load average может расти из-за процессов, которые ждут данных с диска (при прочих равных, на системе с медленным диском LA будет выше), либо данных по сети (так же все зависит от скорости подключения). Системе нет никакого смысла оставлять работающим тот процесс, который еще не сформировал свои данные для обсчета, поэтому она "усыпит" его и поставит в очередь.

Если резюмировать вкратце: слишком высокий LA означает то, что в системе есть какие-то проблемы, но не указывает на то, что проблемы конкретно с процессором.

Load average никогда не дает полной картины производительности системы. Всегда нужно учитывать и другие метрики, такие как использование памяти, нагрузки на дисках и сетевую активность.

Всем добра и стабильно работающих серверов!