BLACKBOXЦентр помощи

Диагностика нагрузки сервера (CPU, RAM, диск, сеть)

Базовые команды, чтобы понять, почему сервер тормозит или не отвечает, и что делать в каждом случае.

общееОбновлено 2026-10-09~10 мин чтения
На этой странице

Когда сервер начинает тормозить или перестаёт отвечать, причина чаще всего в том, что не хватает одного из четырёх ресурсов: процессора (CPU), памяти (RAM), диска или сети. В этом руководстве — команды, которые находят виновника, и что делать в каждом случае. Команды выполняются на сервере по SSH от имени root. Как менялась нагрузка со временем, видно в панели app.blackbox.md на странице «Мониторинг» (app.blackbox.md/monitoring, боковое меню → «Инфраструктура» → «Мониторинг»).

Доступно: всем, у кого есть root-доступ по SSH к серверу BLACKBOX с Ubuntu, Debian, AlmaLinux или CentOS Stream. Графики в панели — владельцу сервера, для серверов с активной дополнительной услугой «Мониторинг».

Сервер тормозит или не отвечает: что делать по порядку

  1. Подключитесь по SSH (Подключение к серверу по SSH (Windows, macOS, Linux)):

    ssh root@IP_СЕРВЕРА
  2. Если подключиться удалось, пусть даже медленно, не перезагружайте сервер сразу: перезагрузка сотрёт следы проблемы. Выполните команды из разделов ниже, начиная с «Быстрый осмотр».

  3. Если SSH не отвечает (истекает время ожидания или сессия зависает): в панели откройте «Мои серверы», нажмите «Перезагрузить» на карточке сервера и подтвердите «Перезагрузить {name}?». Подождите 30–60 секунд и подключитесь снова. Если панель показывает power_action_failed, сервер, возможно, выключен: нажмите «Запустить». Подробнее: Перезагрузка, остановка и запуск сервера.

  4. Если сервер так и не ответил через несколько минут, напишите в поддержку (Как связаться с поддержкой BLACKBOX). Укажите IP-адрес сервера, номер заказа (BBX-…), дату и время, когда началась проблема. Если вопрос срочный и сейчас рабочее время, также позвоните по номеру +373 78 003948 (пн–пт, 09:00–18:00 по времени Молдовы).

  5. Когда сервер снова заработает, выясните причину: см. вопрос «Сервер упал, а после перезагрузки работает. Как узнать причину?» в конце статьи.

Если SSH отвечает Permission denied, сервер работает, а проблема в авторизации: Не удаётся подключиться по SSH.

Примечание У клиентов нет веб-консоли и VNC, а в панели нет кнопки принудительной перезагрузки (hard reset). Если «Перезагрузить» не помогает, вмешаться может только команда BLACKBOX.

Быстрый осмотр: процессор, память, процессы

uptime: средняя нагрузка

uptime
nproc
 10:42:01 up 12 days,  3:05,  1 user,  load average: 3.85, 2.10, 1.20
2

Три числа после load average — средняя нагрузка за последнюю минуту, за 5 и за 15 минут. Сравнивайте их с числом vCPU сервера: его выводит nproc, а ещё оно указано на карточке сервера в разделе «Мои серверы», в строке «Конфигурация» (например, «2 vCPU · 4 GB · 40 GB»).

Средняя нагрузка Что это значит
меньше числа vCPU у процессора есть запас
равна числу vCPU сервер работает на пределе
постоянно больше числа vCPU процессы стоят в очереди: сервер перегружен

В примере 3,85 при 2 vCPU — это перегрузка, а первое число, намного большее третьего, показывает, что нагрузка выросла за последние минуты. В Linux в нагрузку входят и процессы, которые ждут диск: высокая нагрузка при почти свободном процессоре указывает на диск (столбец wa ниже).

top или htop: какой процесс нагружает

top

Вверху top показывает строку %Cpu(s) (её столбцы описаны в разделе про vmstat) и память, ниже — процессы, самые активные сверху. Полезные клавиши: P — сортировка по CPU, M — по памяти, 1 — каждый vCPU отдельно, q — выход.

htop показывает то же самое, но в цвете и нагляднее. В Ubuntu и Debian установите его так:

apt update
apt install -y htop

В AlmaLinux и CentOS Stream пакет берётся из репозитория EPEL:

dnf install -y epel-release
dnf install -y htop

Список процессов, отсортированный по CPU и по памяти, который удобно скопировать в тикет:

ps aux --sort=-%cpu | head -n 15
ps aux --sort=-%mem | head -n 15

free -h: память

free -h
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       3.2Gi       118Mi        24Mi       512Mi       356Mi
Swap:             0B          0B          0B

Смотрите на столбец available, а не на free: Linux занимает свободную память под кеш (buff/cache) и отдаёт её, когда она нужна приложениям. Память закончилась, если available близок к нулю, а swap, если он есть, заполнен. Swap: 0B означает, что на сервере нет swap.

vmstat 1 5: картина за несколько секунд

vmstat 1 5

Команда выводит 5 строк с интервалом в секунду. Первая строка — среднее значение с момента загрузки сервера, поэтому смотрите на следующие.

Столбец Что показывает Признак проблемы
r процессы, которые ждут процессор постоянно больше числа vCPU
b заблокированные процессы, обычно ждут диск постоянно больше 0
si, so чтение из swap / запись в swap постоянно больше 0: оперативной памяти не хватает
us, sy доля CPU, занятая приложениями / системой вместе около 100
wa доля CPU в ожидании диска высокие значения: узкое место — диск
st «украденное» время (steal): сколько виртуальный процессор ждал физический сервер постоянно высокое: см. ниже

Значение st бывает только на виртуальных серверах, и несколько процентов время от времени — это нормально. Если st остаётся высоким несколько минут подряд, хотя ваши приложения почти не нагружают процессор, напишите в поддержку и приложите вывод команды vmstat 1 5.

Диск: место и скорость

df -h
df -i

df -h показывает занятое место на каждом разделе: смотрите столбец Use% для /. df -i показывает иноды (количество файлов): при IUse% 100% новые файлы создать нельзя, даже если место ещё есть. Заполненный диск останавливает базы данных и сайты. Как найти, что занимает место, и освободить его: Диск сервера заполнен.

Нагрузку на диск измеряет iostat из пакета sysstat. Установите его в Ubuntu и Debian:

apt update
apt install -y sysstat

В AlmaLinux и CentOS Stream:

dnf install -y sysstat

Затем выполните:

iostat -x 1 3

Команда выводит 3 отчёта с интервалом в секунду; первый — среднее значение с момента загрузки. Для основного диска (обычно vda или sda) смотрите:

Столбец Что показывает Признак проблемы
r/s, w/s операций чтения / записи в секунду сумма держится около предела диска
r_await, w_await среднее время одного чтения / записи в миллисекундах десятки или сотни миллисекунд
%util какую долю времени диск был занят постоянно около 100

Процесс, который больше всех читает или пишет, покажет pidstat из того же пакета (столбцы kB_rd/s и kB_wr/s):

pidstat -d 1 5

На странице тарифов у семейства Basic указан диск на 300 IOPS, у семейств Стандарт и CPU — на 3000 IOPS. Если r/s и w/s в сумме держатся около этого значения, сервер упирается в скорость диска. Апгрейд в панели возможен только в пределах того же семейства тарифов; если нужен другой тип диска, напишите нам.

Сеть и службы

Какие программы слушают порты

ss -tulpn

Каждая строка — открытый порт и программа, которая его слушает, например 0.0.0.0:80 с users:(("nginx",…)). 0.0.0.0 или * — все адреса, 127.0.0.1 — только сам сервер. Если сайт не отвечает и портов 80 и 443 в списке нет, веб-сервер не запущен. Какие порты доступны из интернета: Файрвол: сетевая фильтрация и ufw/firewalld на сервере.

Трафик и соединения

sar -n DEV 1 5
ss -s

sar (тоже из sysstat) каждую секунду показывает входящий и исходящий трафик на каждом интерфейсе — столбцы rxkB/s и txkB/s. ss -s подсчитывает открытые соединения. Адреса с наибольшим числом соединений:

ss -tn state established | awk 'NR>1 {print $4}' | sed 's/:[0-9]*$//' | sort | uniq -c | sort -rn | head

Попытки подбора пароля к SSH

В Ubuntu и Debian:

journalctl -u ssh --since "1 hour ago" | grep -ciE "failed password|invalid user"

В AlmaLinux и CentOS Stream:

journalctl -u sshd --since "1 hour ago" | grep -ciE "failed password|invalid user"

Результат — число неудачных попыток входа за последний час. Сотни или тысячи означают, что боты подбирают пароли к серверу. Установите SSH-ключ, затем отключите вход по паролю в панели кнопкой «Отключить вход по паролю» (Включение и отключение входа по паролю по SSH) и установите fail2ban (Защита от подбора паролей с помощью fail2ban). Если на сервер идёт много трафика с множества адресов и сеть перегружена, напишите в поддержку.

Упавшие службы и ошибки в журнале

systemctl --failed
journalctl -p err -b

systemctl --failed выводит службы, завершившиеся с ошибкой; 0 loaded units listed. означает, что таких нет. journalctl -p err -b показывает ошибки с момента последней загрузки (выход — q). Для службы из списка посмотрите состояние и последние сообщения, затем перезапустите её:

systemctl status ИМЯ_СЛУЖБЫ
journalctl -u ИМЯ_СЛУЖБЫ -n 50 --no-pager
systemctl restart ИМЯ_СЛУЖБЫ

Нехватка памяти (OOM)

Когда заканчиваются оперативная память и swap, ядро Linux принудительно завершает один из процессов, как правило тот, который занимает больше всего памяти (OOM killer). Обычно это база данных или приложение: сайт внезапно падает без ошибки в самом приложении. Проверьте:

journalctl -k | grep -i "out of memory"
dmesg -T | grep -iE "out of memory|killed process"

Такая строка подтверждает причину:

Out of memory: Killed process 1234 (mysqld) total-vm:2457600kB, anon-rss:1503232kB, …

Что делать:

  1. Снова запустите остановленную службу командой systemctl restart (см. раздел выше).
  2. Добавьте swap как запас на короткие пики: Добавление файла подкачки (swap).
  3. Уменьшите потребление памяти приложением: меньше процессов PHP-FPM (pm.max_children), меньший буфер MariaDB/MySQL (innodb_buffer_pool_size), лимиты памяти для Docker-контейнеров.
  4. Если приложению постоянно нужно больше памяти, перейдите на больший тариф: Апгрейд сервера: переход на больший тариф.

Частые причины

Что вы видите Вероятная причина Что делать
Один процесс долго держит процессор на 100% процесс вышел из-под контроля: зациклился, завис скрипт, наложились задачи cron перезапустите службу или завершите процесс (команды ниже)
available около 0, сообщения «Out of memory» закончилась память раздел «Нехватка памяти (OOM)»
Use% 100% для /, ошибка «No space left on device» диск заполнен Диск сервера заполнен
Высокий wa, %util около 100 диск перегружен найдите процесс через pidstat -d; проверьте предел IOPS тарифа
Сотни неудачных попыток входа по SSH, много соединений с одних и тех же адресов подбор паролей или боты SSH-ключи и Защита от подбора паролей с помощью fail2ban
Нагрузка постоянно выше числа vCPU при обычной работе приложения тариф мал для приложения Апгрейд сервера: переход на больший тариф
st высокий несколько минут подряд физический сервер загружен напишите в поддержку, приложите вывод vmstat 1 5

Если процесс относится к службе (nginx, php-fpm, mariadb и т. п.), перезапустите службу:

systemctl restart ИМЯ_СЛУЖБЫ

Иначе попросите процесс завершиться (PID — число из первого столбца top):

kill PID

И только если через несколько секунд процесс всё ещё работает, завершите его принудительно:

kill -9 PID

Внимание Прежде чем завершать процесс, выясните, что это за процесс: ps -fp PID или systemctl status PID. Не останавливайте службу ssh (sshd в AlmaLinux и CentOS Stream): потеряете доступ. Процесс alloy — агент услуги «Мониторинг»; без него графики в панели перестанут обновляться. Неизвестный процесс, который загружает процессор, может быть признаком взлома: Сервер взломан или атакован: что делать.

Графики в панели

Команды показывают, что происходит сейчас. Чтобы увидеть, когда началась проблема, откройте страницу «Мониторинг» в панели. Для серверов с активной услугой «Мониторинг» блок «Динамика» показывает графики «Загрузка CPU (%)», «Использование ОЗУ (%)», «Использование диска (%)», «Сеть (байт/с)», «Средняя нагрузка (1м)» и «Процессы» за период от «1 ч» до «90 дней». Метрики хранятся примерно 15 дней. На той же странице блок «Оповещения» показывает оповещения по вашим серверам и может присылать их на email.

Без услуги «Мониторинг» данных о сервере на странице нет — диагностируйте командами из этого руководства.

Что отправить в поддержку

Если причину найти не удалось, создайте тикет: «Личный кабинет» → «Помощь и поддержка» → «Новый тикет» (Создание тикета в поддержку). В поле «Сервер (необязательно)» укажите IP-адрес сервера. В поле «Опишите проблему» напишите, когда началась проблема и что вы уже пробовали, и вставьте вывод этих команд:

uptime
free -h
df -h
vmstat 1 5
ps aux --sort=-%cpu | head -n 15

Поле вмещает не больше 10 000 символов, более длинный текст обрезается без предупреждения. Не отправляйте пароли, закрытые ключи и API-токены.

Частые вопросы

Средняя нагрузка — 4, а у сервера 2 vCPU. Это плохо? Процессы стоят в очереди. Если это ненадолго (резервное копирование, обновление), ничего страшного. Если нагрузка держится и сайт отвечает медленно, найдите процесс через top; если это обычная нагрузка вашего приложения, нужен тариф побольше.

free -h показывает почти 0 в столбце free. Память заканчивается? Не обязательно. Важен столбец available: память из buff/cache освобождается, когда она нужна приложениям.

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

journalctl --list-boots
journalctl -b -1 -p err
journalctl -k -b -1 | grep -i "out of memory"

Если journalctl --list-boots показывает только одну загрузку, журнал после перезагрузки не сохраняется. Тогда ищите сообщения в /var/log/syslog (Ubuntu, Debian) или /var/log/messages (AlmaLinux, CentOS Stream), если такой файл есть, и на графиках страницы «Мониторинг», если у сервера есть услуга «Мониторинг». Чтобы журнал сохранялся и дальше, создайте для него постоянный каталог:

mkdir -p /var/log/journal
systemctl restart systemd-journald

Нет команды iostat, pidstat, sar или htop. Установите пакет sysstat (для первых трёх) или htop командами из разделов выше.

Можно ли посмотреть нагрузку без SSH? В панели — только на странице «Мониторинг», для серверов с услугой «Мониторинг». Панель не показывает даже, включён сервер или выключен. Команды из этого руководства может выполнить за вас и AI-ассистент, подключённый к аккаунту: Выполнение команд на сервере через AI.

Не нашли ответ?Напишите нам — служба поддержки ответит. support@blackbox.md
Открыть тикет