Linux Troubleshooting

Высокая нагрузка на сервере: где искать причину

Алгоритм диагностики высокой нагрузки: load average через uptime, CPU через ps/top, память через free, диск через iotop, сеть через ss. Скрипт-снимок состояния.

Проверено: Ubuntu 22.04/24.04

Сервер тормозит или перестаёт отвечать. CPU 100%, память на исходе, диск молотит — нужно быстро найти источник. Алгоритм от общей картины к конкретному процессу.

Шаг 1: общая картина за 30 секунд

# Нагрузка, CPU, память, диск — всё сразу
top -bn1 | head -20

# или htop (удобнее)
htop

# Средняя нагрузка за 1/5/15 минут
uptime
# load average: 2.50, 1.80, 1.20
# Если load > количества ядер CPU — перегрузка
# Узнать количество ядер
nproc
grep -c '^processor' /proc/cpuinfo

Шаг 2: CPU — что грузит

# Процессы по убыванию CPU
ps aux --sort=-%cpu | head -15

# В реальном времени (нажать P для сортировки по CPU)
top

# Конкретный процесс: что он делает
sudo strace -p PID -e trace=all -c 2>&1 | head -20

# Сколько потоков у процесса
ls /proc/PID/task | wc -l

Шаг 3: память — утечка или нехватка

# Общая картина
free -h
# Важно: Available — реально свободная

# Процессы по памяти
ps aux --sort=-%mem | head -15

# Детально по процессу (RES = реальная память)
cat /proc/PID/status | grep -E 'VmRSS|VmSwap'

# Использование swap
swapon --show
cat /proc/swaps
Совет: High swap usage при малом Available RAM — классический признак нехватки памяти. Сервер начинает медленно работать из-за swap.

Шаг 4: диск — I/O блокирует систему

# I/O в реальном времени
iostat -x 2 5
# %util > 80% — диск перегружен

# Какой процесс грузит диск
sudo iotop -o
# -o показывает только активные

# Свободное место
df -h

# Большие файлы
du -sh /* 2>/dev/null | sort -rh | head -10

Шаг 5: сеть — трафик или соединения

# Активные соединения
ss -s

# Много соединений в TIME_WAIT или CLOSE_WAIT — проблема
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

# Трафик в реальном времени
nethogs          # по процессам
iptraf-ng        # по интерфейсам

# Пакеты/ошибки
ifstat -i eth0 1

Быстрый скрипт-снимок состояния

#!/bin/bash
echo "=== $(date) ==="
echo "--- UPTIME ---" && uptime
echo "--- CPU TOP-5 ---" && ps aux --sort=-%cpu | head -6
echo "--- MEM TOP-5 ---" && ps aux --sort=-%mem | head -6
echo "--- DISK ---" && df -h / && iostat -x 1 1 | tail -5
echo "--- NET CONNECTIONS ---" && ss -s

Итог

Последовательность: uptime (load average) → top/htop (CPU) → free (RAM) → iotop (диск) → ss (сеть). За 2 минуты можно определить источник нагрузки и перейти к устранению.