Сервер работает медленно: диагностика CPU, RAM и диска
Руководство по обнаружению и устранению проблем производительности сервера: чек-лист проверки CPU, RAM, диска, swap, процессов и сети. Диагностика Linux-сервера.
Содержание
Введение
Если ваш сервер работает медленно, необходимо следовать систематическому чек-листу для определения источника проблемы. Это руководство пошагово описывает наиболее распространённые проблемы производительности и их решения.
Это руководство подготовлено для серверов Linux (Ubuntu, Debian, CentOS, Rocky Linux). Для Windows Server аналогичные проверки выполняются другими инструментами.
1. Проверка использования CPU
Высокая загрузка CPU — наиболее частая причина замедления сервера.
Текущее состояние CPU
# Общее использование CPU
top -bn1 | head -5
# Детальный и интерактивный вид
htop
# Использование по ядрам CPU
mpstat -P ALL 1 5
Процессы с наибольшим использованием CPU
# Список процессов, отсортированный по использованию CPU
ps aux --sort=-%cpu | head -20
# Мониторинг в реальном времени
top -o %CPU
Если использование CPU постоянно выше 90%, необходимо определить и оптимизировать ресурсоёмкие процессы или увеличить ресурсы сервера.
Рекомендации по решению
- Остановите ненужные процессы:
kill -9 PID - Оптимизируйте конфигурацию приложения (количество воркеров, лимит потоков)
- Рассмотрите увеличение ресурсов CPU (повышение тарифа VDS)
2. Проверка использования RAM
Недостаточный объём RAM приводит к использованию swap и резкому замедлению.
Состояние RAM
# Общее состояние памяти
free -h
# Детальная информация о памяти
cat /proc/meminfo | head -10
# Использование RAM по процессам
ps aux --sort=-%mem | head -20
Интерпретация примера вывода
total used free shared buff/cache available
Mem: 7.8Gi 6.2Gi 0.3Gi 0.1Gi 1.3Gi 1.2Gi
Swap: 2.0Gi 1.5Gi 0.5Gi
| Метрика | Нормально | Предупреждение | Критично |
|---|---|---|---|
| Использование RAM | < 70% | 70-90% | > 90% |
| Использование Swap | 0 | < 25% | > 50% |
| Available | > 20% | 10-20% | < 10% |
Если использование swap высокое (> 50%), RAM недостаточно. Swap работает на диске и значительно медленнее RAM.
3. Проверка диска и I/O
Дисковое пространство
# Сводка использования диска
df -h
# Найти самые большие каталоги
du -sh /* 2>/dev/null | sort -rh | head -10
# Найти самые большие файлы
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -10
При использовании диска более 90% могут начаться проблемы с производительностью. 95%+ — критический уровень, требуется срочное освобождение места.
Производительность дискового I/O
# Текущий дисковый I/O
iostat -x 1 5
# Использование I/O по процессам
iotop -o
# Тест скорости чтения/записи диска
dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 oflag=direct
rm /tmp/testfile
| Метрика | NVMe SSD | SATA SSD | HDD |
|---|---|---|---|
| Чтение | 3000+ МБ/с | 500+ МБ/с | 100-200 МБ/с |
| Запись | 2000+ МБ/с | 400+ МБ/с | 80-150 МБ/с |
| IOPS | 500K+ | 50K+ | 100-200 |
4. Анализ использования Swap
Высокое использование swap означает нехватку RAM — сервер управляет памятью через диск.
# Состояние swap
free -h | grep Swap
swapon --show
# Какие процессы используют swap?
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file 2>/dev/null
done | sort -k2 -rn | head -10
Очистка Swap (временное решение)
# Если достаточно свободной RAM, очистить swap
sudo swapoff -a && sudo swapon -a
Очистка swap — временное решение. Для постоянного решения увеличьте объём RAM или оптимизируйте приложения, потребляющие память.
5. Проверка производительности сети
# Статистика сетевого интерфейса
ifconfig eth0
# Количество соединений
ss -s
# Активные соединения (IP с наибольшим количеством соединений)
ss -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
# Использование пропускной способности (требуется nload)
nload eth0
# Тест скорости
wget -O /dev/null http://speedtest.tele2.net/10MB.zip 2>&1 | tail -2
Большое количество соединений (10 000+) может потреблять ресурсы сервера. Возможно, вы подвергаетесь DDoS-атаке — проверьте историю атак в Path Panel.
6. Анализ процессов
# Количество запущенных процессов
ps aux | wc -l
# Зомби-процессы
ps aux | awk '{if ($8 == "Z") print}'
# Самые долго работающие процессы
ps -eo pid,etime,comm --sort=-etime | head -20
# Использование ресурсов конкретным приложением
ps aux | grep -i mysql
ps aux | grep -i java
ps aux | grep -i node
7. Проверка системных логов
# Последние системные ошибки
dmesg | tail -50
# Логи OOM (Out of Memory) killer
dmesg | grep -i "oom\|killed process"
# Системные логи
journalctl -p err --since "1 hour ago"
# Ошибки диска
dmesg | grep -i "error\|fail\|i/o"
Если вы видите логи OOM killer, RAM недостаточно и система принудительно завершает процессы для освобождения памяти.
Быстрый чек-лист
# Сводка общего состояния одной командой
echo "=== CPU ==="; top -bn1 | head -5; echo "\n=== RAM ==="; free -h; echo "\n=== DISK ==="; df -h /; echo "\n=== LOAD ==="; uptime; echo "\n=== TOP PROCESSES ==="; ps aux --sort=-%cpu | head -5
Когда обращаться в службу поддержки?
- Если при проверках выше не обнаружена явная проблема
- Если вы подозреваете проблему на аппаратном уровне
- Если снижена производительность сети и вы подозреваете DDoS-атаку
- Если OOM killer срабатывает постоянно
При создании запроса в поддержку приложите вывод вышеуказанных команд — это ускорит решение проблемы.
Связанные статьи
Проблема SSH-подключения: не могу подключиться к серверу
Руководство по решению проблем SSH-подключения: правила файрвола Path.net, Default Block, создание правила фильтрации для SSH-порта и шаги по устранению неполадок.
Проблема RDP-подключения: не могу подключиться к Windows Server
Руководство по решению проблем RDP-подключения: правила файрвола Path.net, Default Block, создание правила фильтрации для порта RDP и шаги по устранению неполадок.
Как провести MTR-тест и отправить результаты в поддержку
Руководство по сетевому тестированию с помощью WinMTR и Linux MTR, создание правила фильтрации ICMP и отправка результатов в службу поддержки. Диагностика потери пакетов.