← Назад к вопросам

Что такое Load Average в Linux?

2.0 Middle🔥 291 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Load Average в Linux: нагрузка на систему

Load Average — это метрика, которая показывает среднее количество процессов, находящихся в очереди на выполнение (или активно выполняющихся) на протяжении определённого времени. Это одна из самых важных метрик для мониторинга производительности серверов.

Где увидеть Load Average

# Команда uptime
$ uptime
 14:30:42 up 10 days,  2:15,  3 users,  load average: 0.52, 0.48, 0.45

# Команда top
$ top
top - 14:30:45 up 10 days,  2:15,  3 users,  load average: 0.52, 0.48, 0.45

# Файл /proc/loadavg
$ cat /proc/loadavg
0.52 0.48 0.45 1/342 12345

Три значения Load Average

Load average всегда показывает три числа:

0.52  0.48  0.45
  |     |     |
  1min  5min  15min
  • Первое число (1 минута) — средняя нагрузка за последнюю минуту
  • Второе число (5 минут) — средняя нагрузка за последние 5 минут
  • Третье число (15 минут) — средняя нагрузка за последние 15 минут

Что означают эти цифры

Load Average = 0.52 означает, что за последнюю минуту в очереди на выполнение было в среднем 0.52 процесса.

Это не количество CPU, а очередь работ. На системе с одним ядром CPU:

Load Average 1.0  = CPU загружен на 100% (один процесс использует ядро полностью)
Load Average 0.5  = CPU загружен на 50% (полсекунды работает, полсекунды ждёт)
Load Average 2.0  = CPU перегружен (два процесса ждут в очереди, один работает)

На системе с четырьмя ядрами CPU:

Load Average 4.0  = Все ядра заняты на 100%
Load Average 8.0  = Ядра перегружены (в два раза больше работы, чем могут обработать)
Load Average 2.0  = Ядра используются на 50%

Как интерпретировать Load Average

Хорошее правило:

load_average / количество_ядер_CPU

Если это число:
< 1.0  → Система нормально работает
= 1.0  → Система работает на пределе
> 1.0  → Система перегружена

Примеры интерпретации

Пример 1: Сервер с 4 ядрами

Load Average: 4.0

Средняя нагрузка = 4.0 / 4 = 1.0
Вывод: ВСЕ ядра заняты, но это нормально. Нет очереди ожидания.

Пример 2: Сервер с 4 ядрами

Load Average: 8.0

Средняя нагрузка = 8.0 / 4 = 2.0
Вывод: Ядра перегружены в 2 раза. В очереди ждут примерно 4 процесса.
Нужно оптимизировать или добавить ресурсы.

Пример 3: Сервер с 2 ядрами

Load Average: 0.8

Средняя нагрузка = 0.8 / 2 = 0.4
Вывод: Ядра используются только на 40%. Много свободных ресурсов.

Как узнать количество ядер CPU

import os
import multiprocessing

# Способ 1: через multiprocessing
core_count = multiprocessing.cpu_count()
print(f"Ядер CPU: {core_count}")

# Способ 2: через os
core_count = os.cpu_count()
print(f"Ядер CPU: {core_count}")

# Команда в Linux
$ nproc
4

# Или
$ grep -c ^processor /proc/cpuinfo
4

Что влияет на Load Average

Load Average считает процессы в двух состояниях:

  1. Runnable — готовы работать, ждут в очереди
  2. Uninterruptible sleep — спят в ядре (например, ждут I/O диска)

Именно поэтому Load Average может быть высоким, даже если CPU свободен:

# Python скрипт, который создаёт высокий Load Average
import os
import subprocess

# Проверим Load Average
os.system('uptime')

# Интенсивное чтение с диска (высокий I/O)
for i in range(100):
    subprocess.run(['dd', 'if=/dev/sda', 'of=/dev/null', 'bs=1M', 'count=100'])

# Load Average вырастет, но CPU может быть свободен!

Мониторинг Load Average в приложении

import os
from typing import Tuple

def get_load_average() -> Tuple[float, float, float]:
    """Возвращает Load Average за 1, 5 и 15 минут"""
    return os.getloadavg()

def get_cpu_count() -> int:
    """Возвращает количество ядер CPU"""
    return os.cpu_count()

def is_system_overloaded() -> bool:
    """Проверяет, перегружена ли система"""
    load_avg_1min, _, _ = get_load_average()
    cpu_count = get_cpu_count()
    return load_avg_1min > cpu_count * 0.8  # Сигнал при 80% загрузке

# Использование
load = get_load_average()
cpu = get_cpu_count()
print(f"Load Average: {load[0]:.2f}, {load[1]:.2f}, {load[2]:.2f}")
print(f"CPU cores: {cpu}")
print(f"System overloaded: {is_system_overloaded()}")

Трендинг Load Average

Смотри на все три значения вместе:

0.52  0.48  0.45
  ↓     ↓     ↓
  1min  5min  15min

Числа уменьшаются слева направо → Нагрузка СНИЖАЕТСЯ (хорошо)
Числа растут слева направо     → Нагрузка РАСТЕТ (проблема)

Примеры:

Load average: 5.0, 4.0, 2.0
→ Проблема нарастает! Минуту назад было нормально, а сейчас высокая нагрузка

Load average: 2.0, 3.0, 4.0
→ Проблема стабилизируется. Была высокая нагрузка 15 минут назад, уменьшается

Отличие Load Average от CPU Usage

Load Average и CPU Usage — это разные метрики:

  • CPU Usage — процент времени, когда CPU выполняет инструкции (не спит)
  • Load Average — количество процессов в очереди (включая ждущие I/O)

Высокий Load Average с низким CPU Usage = проблема с диском или сетью.

Вывод

Load Average — это критическая метрика для мониторинга серверов. Помните правило: Load Average / CPU cores. Если это число > 1, система перегружена и нужна оптимизация.