Как в Linux рассчитывается load average (средняя нагрузка системы)?

«Как в Linux рассчитывается load average (средняя нагрузка системы)?» — вопрос из категории Linux, который задают на 28% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Load average — это три числа, показывающие усредненную нагрузку на систему за последние 1, 5 и 15 минут. Это не просто среднее арифметическое, а экспоненциально затухающее скользящее среднее, которое придает больший вес недавним значениям.

Что учитывается в нагрузке? В расчет включаются процессы, находящиеся в состояниях:

  • R (Running или Runnable): Процессы, использующие или ожидающие использования CPU.
  • D (Uninterruptible Sleep): Процессы, заблокированные на операциях ввода-вывода (обычно дискового), которые не могут быть прерваны.

Интерпретация значений: Значение load average интерпретируется относительно количества доступных CPU-ядер.

  • Load = 1.00 на одноядерной системе означает, что система была загружена на 100% в среднем за период.
  • Load > 1.00 указывает на очередь процессов, ожидающих своей очереди на CPU или завершения I/O.
  • Load < 1.00 означает, что в среднем были свободные ресурсы.

Пример: На сервере с 4 ядрами load average: 3.20, 2.10, 1.05 означает:

  • За 1 минуту: средняя нагрузка ~3.2 процесса, что меньше 4 ядер — система справлялась, но была загружена.
  • За 5 и 15 минут: нагрузка была еще ниже.

Как посмотреть:

# Команда uptime
$ uptime
 16:48:21 up 10 days,  1:23,  1 user,  load average: 0.15, 0.21, 0.19

# Чтение из /proc/loadavg
$ cat /proc/loadavg
0.15 0.21 0.19 1/450 28789
# Последние два числа: количество выполняемых процессов/общее количество процессов, последний использованный PID.

Высокий load при низком использовании CPU часто указывает на проблемы с I/O (диском или сетью).