Что такое Load Average в Linux?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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 считает процессы в двух состояниях:
- Runnable — готовы работать, ждут в очереди
- 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, система перегружена и нужна оптимизация.