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

Что нужно делать, если на сервере высокий Load Average?

2.0 Middle🔥 211 комментариев
#Linux и администрирование#Мониторинг и логирование

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

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

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

Общий подход к диагностике высокой загрузки системы (High Load Average)

Load Average — это среднее значение нагрузки на систему за 1, 5 и 15 минут, учитывающее процессы в состояниях R (Running) и D (Uninterruptible Sleep). Высокие значения (превышающие количество CPU ядер в 2-3 раза) сигнализируют о проблеме. Моя стратегия диагностики включает несколько этапов, от быстрой оценки до глубокого анализа.

1. Быстрая первичная диагностика (First Responder)

Первым делом я собираю ключевые метрики, чтобы понять общую картину:

# Смотрю Load Average и время работы
uptime

# Анализирую утилизацию CPU, чтобы отличить CPU-bound от I/O-bound проблему
top -H  # Или htop, если установлен

# Проверяю использование памяти и своп
free -h

# Смотрю статистику ввода-вывода (ключевой показатель при I/O wait)
iostat -xz 2 5  # Для анализа дисковых операций

# Проверяю сетевую активность
sar -n DEV 2 5

Уже на этом этапе часто становится ясно, является ли проблема CPU-bound (высокий %us, %sy) или I/O-bound (высокий %wa, %util у дисков).

2. Глубокая диагностика процессов и потоков

Если нагрузка высокая, а CPU не загружен на 100%, скорее всего, процессы "залипли" в состоянии D (Uninterruptible Sleep) — это критично, так как такие процессы нельзя убить, и они ожидают ввода-вывода от устройств (чаще всего диска или сети).

# Ищем процессы в состоянии D
ps aux | awk '$8 ~ /D/ { print $0 }'

# Смотрю более детальную информацию о процессах
ps -eo pid,ppid,stat,cmd,wchan:32,pcpu,pmem --sort=-pcpu | head -20

# Анализирую количество потоков в системе (может быть исчерпан лимит)
ps -eLo pid,tid,psr,pcpu,stat,wchan:32,comm | head -30

3. Анализ конкретных подсистем

Дисковый ввод-вывод (наиболее частая причина)

# Использую iotop для идентификации процессов, активно работающих с диском
iotop -oP

# Смотрю очередь записи/чтения и await время
iostat -dxm 2 5 | grep -A 1 "Device"

# Проверяю использование inodes (частая проблема с множеством мелких файлов)
df -i

Проблемы с памятью и свопом

# Ищу признаки memory pressure и oom-killer
dmesg -T | grep -i "oom\|kill"

# Проверяю использование slab памяти (может "протекать")
slabtop -s c

# Анализирую использование swap
vmstat 2 5

Сетевые проблемы

# Проверяю, не исчерпаны ли лимиты сокетов или портов
ss -s

# Анализирую сетевые подключения (много TIME_WAIT? SYN_RECV?)
netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c

4. Сбор дополнительной информации для долговременного анализа

В сложных случаях использую профилировщики:

# perf для анализа производительности ядра
perf top -z

# trace/strace для отслеживания системных вызовов конкретного процесса
strace -fp <PID> -c  # Или strace -fp <PID> -T -tt -o trace.log

5. Тактические действия и мониторинг

Пока идет диагностика, важно контролировать ситуацию:

  • Не убивать процессы в состоянии D — это бесполезно и может усугубить ситуацию
  • При CPU-bound нагрузке:
    - Определить процессы-лидеры (`top -c`, затем `top -H -p <PID>`)
    - Собрать thread dump для Java (`jstack <PID>`), pprof для Go
  • При I/O-bound нагрузке:
    - Проверить RAID-массивы на деградацию (`mdadm -D /dev/md*`)
    - Оптимизировать запросы к БД, проверить индексы
    - Рассмотреть кэширование или увеличение RAM для уменьшения свопа
  • Убедиться, что не исчерпаны системные лимиты (ulimit -a, /proc/sys/fs/file-max)

6. Долгосрочные меры после инцидента

После решения проблемы критически важно:

  • Настроить алертирование по Load Average (с учетом количества CPU ядер)
  • Внедрить мониторинг не только LA, но и satellite metrics:
    - Дисковые: IOPS, latency, queue depth
    - Сетевые: packet drops, retransmits
    - Память: page faults, swap usage
  • Рассмотреть архитектурные изменения:
    - Вертикальное/горизонтальное масштабирование
    - Оптимизация запросов к БД и кэширование
    - Вынос медленных операций в фоновые задания (queue workers)

Ключевой принцип: Load Average — это симптом, а не сама болезнь. Настоящая причина чаще всего кроется в плохой оптимизации кода, неадекватных настройках СУБД, проблемах с дисками или сетью, либо в недостаточных ресурсах для текущей нагрузки. Системный подход к диагностике позволяет не просто временно снизить нагрузку, а устранить первопричину проблемы.

Что нужно делать, если на сервере высокий Load Average? | PrepBro