Перейти к содержимому

Сервер тормозит: как найти причину

Облачные серверы4 мин чтения

Что значит load average, как в top и htop найти процесс, который нагружает процессор или память, что такое OOM killer и когда пора добавить ресурсов.

Содержание

Медленный сервер почти всегда упирается в одно из трёх: процессор, память или диск. Несколько команд покажут, во что именно и какой процесс виноват.

Нагрузка: load average

$ uptime
 10:42:01 up 12 days,  3:07,  1 user,  load average: 3.52, 2.10, 1.05
$ nproc
2

Три числа — средняя нагрузка за 1, 5 и 15 минут: сколько процессов в среднем работали или ждали своей очереди. В Linux сюда попадают и те, кто ждёт диска. Сравнивайте с числом ядер (nproc): нагрузка 2 на двух ядрах — сервер занят полностью, 4 — задачи стоят в очереди.

Первое число больше третьего — нагрузка растёт, меньше — спадает. В примере выше 3,52 на двух ядрах: перегрузка, и она растёт.

top и htop: кто нагружает

top есть в любой системе. Удобнее htop — с полосками по ядрам, поиском и прокруткой. В Ubuntu он уже установлен, в остальных системах:

sudo apt install htop    # Debian
sudo dnf install htop    # AlmaLinux, из EPEL
sudo pkg install htop    # FreeBSD
tophtop
сортировать по процессоруPP или F6
сортировать по памятиMM или F6
найти процесс—F3
дерево процессовVF5
завершить процессkF9
выходqq

Строка %Cpu(s) в top показывает, на что уходит процессор:

ПолеЧто значит
usпрограммы: сайт, база, ваши скрипты
syядро системы: сеть, диски, переключение задач
waожидание диска: процессор свободен, но ждёт чтения или записи
idпростой

Память

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       2.9Gi       150Mi        20Mi       1.0Gi       0.7Gi
Swap:          1.0Gi       0.4Gi       0.6Gi

Главный столбец — available: сколько памяти ещё можно отдать программам. Маленькое free — это нормально: Linux занимает свободную память под кэш диска и отдаёт её по первому требованию. Плохо, когда available близко к нулю и растёт занятый swap.

Кто занял память: ps aux --sort=-rss | head — столбец RSS, в килобайтах. Во FreeBSD — top -o res.

OOM killer: программа остановилась сама

Когда память кончается совсем, ядро Linux принудительно завершает самый крупный процесс — чаще всего базу данных или PHP. Снаружи это выглядит так: «сайт упал, MySQL почему-то остановился». Проверьте:

sudo journalctl -k | grep -i -E 'out of memory|killed process'

-k — сообщения ядра с последней загрузки, за прошлую добавьте -b -1. В AlmaLinux журнал прошлых загрузок по умолчанию не хранится — там ищите в /var/log/messages. Если строки есть — серверу не хватает памяти. Что можно сделать:

  • настроить программы скромнее: меньше процессов PHP-FPM, меньше буферы базы;
  • добавить файл подкачки — запас на короткие пики;
  • добавить памяти — об этом ниже.

Диск

Высокий wa в top и большая нагрузка при свободном процессоре — значит, всё ждёт диск. Кто читает и пишет больше всех, покажет pidstat из пакета sysstat:

sudo apt install sysstat    # или dnf install sysstat
pidstat -d 1                # чтение и запись по процессам, раз в секунду
iostat -x 1                 # загрузка диска: столбец %util

Частые причины: резервное копирование в часы пик, запросы к базе без индексов, слишком подробные журналы и подкачка — когда памяти мало, система вынуждена писать её на диск. Если диск ещё и заполнен — Закончилось место на диске.

Сервер свободен, а сайт тормозит

Если нагрузки почти нет, а сайт отвечает медленно, дело в самом сайте: медленные запросы к базе, обращения к внешним сервисам, которые долго не отвечают. Если же нагрузку создают запросы извне — роботы, наплыв посетителей, — смотрите статью Сайт тормозит от наплыва запросов.

Пора добавить ресурсов

Если нагрузка постоянно выше числа ядер или память всё время на исходе, а программы уже настроены, — добавьте процессоров или памяти. В личном кабинете откройте сервер → вкладка «Ресурсы».

Новые ресурсы заработают после оплаты. Процессор и память можно поменять только на выключенном сервере, поэтому выберите: сразу — сервер выключится, изменится и включится, это около минуты, — или при следующем выключении, когда вы выключите его сами.

Графики процессора, памяти и диска за прошлые дни — на вкладке «Нагрузка»: по ним видно, когда начались проблемы.

Не нашли ответ? Напишите в поддержку — подскажем.