Сервер стал тормозить: как проверить RAM, CPU и диск
Если сервер замедлился, посмотрите на три вещи: RAM, CPU и диск. Подключитесь и выполните три команды: free -h для памяти, top для процессора и df -h для диска. Что заполнено, то и узкое место. Если все три в порядке, проблема обычно в самом приложении.
Начните с нагрузки
Load average — это среднее число процессов, ожидающих CPU или диск. Первые три числа в выводе ниже — средние за последние 1, 5 и 15 минут. Сравните их с числом ядер:
cat /proc/loadavg
nproc
Если нагрузка долго остаётся выше числа ядер, сервер не справляется со своей работой.
RAM: free -h
free -h
Самый важный столбец — Доступно. Если значение очень мало, а строка Swap заполняется, RAM закончилась. Когда память кончается, ядро убивает один из процессов, использующих больше всего памяти (OOM killer). Если база данных или веб-приложение закрываются сами по себе, это часто признак именно такой ситуации. Проверьте так:
sudo dmesg -T | grep -i -E "out of memory|killed process"
CPU: top
top
На открывшемся экране клавиша P сортирует процессы по использованию CPU, а клавиша M — по использованию памяти. Нажмите q, чтобы выйти. В строке CPU вверху смотрите на это:
- us: доля пользовательских процессов. Если она высока, процессор съедает какое-то приложение.
- wa: время ожидания ввода-вывода диска. Если оно высоко, проблема не в CPU, а в диске.
- st: «украденное» у виртуального сервера время, то есть время, которое слой виртуализации отдал процессор кому-то другому. Если оно остаётся высоким, проблема может быть не внутри вашего сервера. Тогда обратитесь в поддержку.
Диск: df -h
df -h
df -i
Первая команда показывает занятое место, вторая — предел числа файлов (inode). Когда диск заполнен полностью, базы данных и приложения не могут писать, а сервер тормозит или выдаёт ошибки. Узнайте, что занимает место:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h | tail -n 8
Если системные журналы выросли, их можно уменьшить командой sudo journalctl --vacuum-size=200M. Если вы используете Docker, docker system df показывает место, занятое образами и контейнерами, а docker stats --no-stream — сколько CPU и памяти использует каждый контейнер.
Симптом, вероятная причина и решение
| Симптом | Вероятная причина | Что сделать |
|---|---|---|
| Страницы иногда тормозят, Доступно мало, подкачка заполнена | Не хватает RAM | Остановите ненужные службы и сократите настройки памяти приложения (например, число рабочих процессов PHP-FPM или память базы данных). Если этого мало, увеличьте сервер. |
Служба закрывается сама, в выводе dmesg появляется «killed process» | Память закончилась, и вмешался OOM killer | Добавьте RAM или сократите использование памяти. |
Один процесс в top постоянно занимает целое ядро | Зависший процесс, неисправный плагин или цикл | Найдите процесс, затем исправьте или отключите приложение или плагин, который за ним стоит. |
| Нагрузка высокая, CPU простаивает, wa высок | Идёт ожидание диска (интенсивная запись или подкачка) | Посмотрите столбцы si и so в выводе vmstat 1 5. Если используется подкачка, добавьте RAM. |
df -h или df -i показывает, что всё занято | Закончилось место на диске или inode | Удалите большие файлы и журналы. Если место продолжает заполняться, увеличьте сервер. |
| st остаётся высоким | Проблема может быть вне вашего сервера | Обратитесь в поддержку. |
В Seturack скорость диска каждого сервера ограничена: при чтении — сплошные 500 МБ/с и 20 000 IOPS, при записи — 200 МБ/с и 8000 IOPS. Если ваши значения в выводе iostat -x 1 5 упираются в эти числа, замедляет вас нагрузка на диск. Сократите работу с помощью кэширования или распределите её по времени. Если iostat нет, установите его командой sudo apt install -y sysstat.
Когда помогает подкачка?
Подкачка использует диск вместо RAM. Она позволяет серверу пережить короткие скачки памяти без OOM killer, но работает не так быстро, как RAM. Если si и so в выводе vmstat 1 5 остаются выше нуля, сервер постоянно пишет в подкачку. Решение — RAM, а не подкачка. Если подкачки нет (swapon --show ничего не выводит) и вы хотите сгладить скачки, можно добавить файл подкачки на 2 ГБ. Эти команды — для файловой системы ext4:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Если ресурсы в порядке
Если RAM, CPU и диск выглядят спокойно, посмотрите в top название процесса, который наверху:
- Если наверху
php-fpm,apache2илиnginx, проблема обычно в самом сайте: тяжёлый плагин, нет кэширования или резкий скачок числа посетителей. - Если наверху
mysqldилиmariadbd, есть медленные запросы. Включите журнал медленных запросов базы данных и посмотрите, какие запросы выполняются долго. - Если незнакомый процесс постоянно съедает CPU, сервер могли взломать. Смените пароли, проверьте открытые сеансы и вывод
sudo ss -tulpn, а при необходимости переустановите сервер с чистой системой.
Когда увеличивать сервер
Порядок такой: сначала настройка, затем кэширование, затем отключение лишней работы. Если после этого нагрузка всё ещё высока, увеличьте сервер. В панели откройте вкладку Размер своего сервера, передвиньте ползунки на новый размер и подтвердите. После оплаты сервер один раз сам перезапустится и вернётся уже нового размера. IP-адрес и данные останутся прежними, а платить нужно только разницу за оставшиеся дни. RAM, vCore и диск можно увеличивать по отдельности, поэтому поднимается только то, чего не хватает. При увеличении диск растёт, а при уменьшении не сжимается. Подробности — в статье о масштабировании.
Если сервер из-за нагрузки не отвечает совсем, SSH может не подключаться. Тогда откройте VNC-консоль из панели или перезапустите сервер из панели.
Комментарии0
Комментариев пока нет
Поделитесь своим мнением первым.
Пожалуйста, войдите или зарегистрируйтесь, чтобы оставить комментарий.