Высокая нагрузка на сервер может привести к медленной работе сайта, ошибкам 502 и 504, зависаниям панели управления и даже недоступности проекта для посетителей.
При этом сама по себе высокая нагрузка ещё не говорит о наличии проблемы. Например, во время резервного копирования, обновления системы или пикового наплыва посетителей нагрузка может временно увеличиваться и затем возвращаться к нормальному уровню.
Главная задача администратора — определить, какой процесс, сайт или служба потребляет ресурсы сервера.
В этой статье рассмотрим основные способы диагностики высокой нагрузки на Linux-сервере.
Что считается высокой нагрузкой
Первым делом стоит посмотреть показатель Load Average.
Выполните команду:
uptime
Пример результата:
14:30:15 up 15 days, 2:14, 1 user, load average: 4.25, 3.87, 3.11
Последние три числа показывают среднюю нагрузку за:
- 1 минуту;
- 5 минут;
- 15 минут.
Если сервер имеет 4 ядра процессора:
- нагрузка до 4 обычно считается нормальной;
- нагрузка выше 4 говорит о высокой загрузке;
- нагрузка значительно выше количества ядер требует дополнительной проверки.
Например:
load average: 18.5
на четырёхъядерном сервере уже является серьёзным поводом для диагностики.
Проверка загрузки процессора
Самый простой инструмент:
top
В верхней части окна отображается общая информация о системе.
Ниже находится список процессов, отсортированных по потреблению ресурсов.
Обратите внимание на столбцы:
%CPU
%MEM
Они показывают использование процессора и памяти каждым процессом.
Если какой-либо процесс постоянно использует 80–100% CPU, именно он может быть причиной проблемы.
Использование htop
Если установлен пакет htop, работать с ним значительно удобнее:
htop
Если утилита отсутствует:
apt install htop -y
Преимущества htop:
- удобный интерфейс;
- отображение нагрузки по каждому ядру;
- сортировка процессов;
- поиск процессов;
- возможность завершения процесса прямо из программы.
Поиск самых ресурсоёмких процессов
Отобразить процессы, потребляющие больше всего процессорного времени:
ps aux --sort=-%cpu | head
Для памяти:
ps aux --sort=-%mem | head
Это позволяет быстро определить основные источники нагрузки.
Проверка использования оперативной памяти
Недостаток памяти часто приводит к замедлению работы сервера.
Проверьте состояние RAM:
free -h
Пример:
Mem: 4.0G used 3.8G free 200M
Если свободной памяти почти не осталось и активно используется Swap, стоит изучить процессы, потребляющие память.
Проверка использования диска
Иногда причиной высокой нагрузки становится диск.
Проверьте свободное место:
df -h
Если раздел заполнен на 100%, многие службы могут работать нестабильно.
Для поиска крупных каталогов:
du -sh /* 2>/dev/null
Для поиска больших файлов:
find / -type f -size +500M
Проверка дисковой активности
Высокая нагрузка может быть связана не с процессором, а с операциями чтения и записи.
Установите пакет:
apt install sysstat -y
После этого выполните:
iostat -x 1
Обратите внимание на показатель:
%util
Если значение постоянно приближается к 100%, диск является узким местом системы.
Проверка сетевой активности
Иногда нагрузка связана с большим количеством входящих подключений.
Проверить сетевые соединения:
ss -ant
Подсчитать количество соединений:
ss -ant | wc -l
Если соединений тысячи или десятки тысяч, возможно:
- идёт DDoS-атака;
- работает ботнет;
- сайт получает аномально высокий трафик.
Проверка веб-сервера
Если используется Nginx:
tail -f /var/log/nginx/access.log
Если используется Apache:
tail -f /var/log/apache2/access.log
Журналы помогут понять:
- какие страницы запрашиваются чаще всего;
- какие IP создают нагрузку;
- есть ли подозрительная активность.
Поиск проблемного сайта на сервере
Если на сервере размещено несколько сайтов, необходимо определить источник нагрузки.
Для PHP-проектов выполните:
top -c
или:
ps auxf
В строке процесса часто можно увидеть путь к конкретному сайту.
Например:
/home/site1/public_html
или:
/home/site2/public_html
Это помогает быстро найти проблемный проект.
Проверка MySQL или MariaDB
База данных также может быть причиной высокой нагрузки.
Проверьте активные запросы:
mysqladmin processlist
или войдите в консоль MySQL:
SHOW FULL PROCESSLIST;
Обратите внимание на:
- долгие запросы;
- большое количество соединений;
- запросы в состоянии Locked.
Проверка Cron-задач
Иногда нагрузка появляется по расписанию.
Посмотреть задания текущего пользователя:
crontab -l
Системные задачи:
ls -la /etc/cron*
Если нагрузка возникает в определённое время суток, стоит проверить именно Cron.
Проверка журналов системы
Полезно изучить последние системные сообщения:
journalctl -xe
или:
dmesg | tail
Здесь могут отображаться ошибки памяти, диска или служб.
Частые причины высокой нагрузки
На практике чаще всего встречаются:
- атаки ботов;
- ошибки в плагинах WordPress;
- медленные SQL-запросы;
- недостаток оперативной памяти;
- отсутствие кэширования;
- заражённые скрипты;
- некорректные Cron-задачи;
- резервное копирование в рабочее время;
- DDoS-атаки;
- переполненный диск.
Что делать после обнаружения проблемы
После определения источника нагрузки можно:
- остановить проблемный процесс;
- отключить неисправный плагин;
- оптимизировать базу данных;
- настроить кэширование;
- ограничить доступ для ботов;
- включить Cloudflare;
- увеличить объём RAM;
- перенести проект на более производительный тариф.
Главное — не пытаться сразу перезагружать сервер при каждой высокой нагрузке. В большинстве случаев несколько минут диагностики позволяют точно определить причину проблемы и устранить её без простоя сайта.
Рекомендации
При регулярных проблемах с производительностью рекомендуется установить систему мониторинга, например Zabbix, Netdata или Uptime Kuma.
Постоянный мониторинг нагрузки позволяет обнаруживать проблемы ещё до того, как они начинают влиять на работу сайта и пользователей.