VDS · Решение проблем

Процессор загружен на 100 %

Как найти процесс, съедающий ядра, отличить настоящую нагрузку от ожидания диска и решить, чинить код или брать ступень выше.

Обновлено 23 августа 2026 г.

Полка на графике процессора во вкладке «Обзор» сама по себе не авария: сборка проекта или архивация честно займут все ядра и отпустят. Тревожно, когда полка держится часами и машина перестаёт отвечать. Разберёмся, кто виноват.

Шаг 1. Посмотреть, кто ест

На «Экране» (VNC) удобно работать с полноэкранными программами:

btop
htop

По последовательной консоли размер окна не передаётся, там всегда 80×24 — интерфейс будет обрезан. Для текстовой консоли берите обычные команды:

top -b -n1 | head -20
ps aux --sort=-%cpu | head -10

Помните про арифметику: %CPU считается по одному ядру. 400 % на VDS-3 — это все четыре ядра, а 100 % на VDS-4 — всего одно из шести.

Шаг 2. Отличить процессор от диска

Средняя загрузка (load average) растёт и от ожидания ввода-вывода, а не только от вычислений:

uptime
vmstat 1 5

В выводе vmstat смотрите столбцы us (пользовательский код), sy (ядро), wa (ожидание диска), st (украденное время). Большой wa означает, что процессор простаивает в ожидании диска — упор в скорость записи, а не в вычисления. Полка по диску на наших ступенях задана правилом: запись 60 МБ/с на ядро, не ниже 60 и не выше 400 МБ/с, чтение вдвое выше, всплеск втрое выше полки держится 30 секунд. Если задача пишет непрерывно, всплеск закончится и вы упрётесь в полку.

Шаг 3. Разобрать конкретный процесс

pidstat -p <pid> 1 5
cat /proc/<pid>/status
journalctl -u <служба> -n 100 --no-pager

Частые находки:

  • веб-приложение крутится в бесконечном цикле после неудачного запроса;
  • база данных выполняет запрос без индекса — смотрите её собственный журнал медленных запросов;
  • задание в cron запускается чаще, чем успевает завершиться, и экземпляры накапливаются: ps aux | grep <имя> покажет десяток копий;
  • майнер, попавший на машину через слабый пароль root. Признак — процесс с бессмысленным именем от нестандартного пользователя и высокая исходящая полоса. В этом случае машину проще переустановить из вкладки «Доступ», чем чистить.

Шаг 4. Ограничить, а не гасить

Если процесс нужен, но не должен мешать остальному:

renice -n 15 -p <pid>
systemctl set-property myapp.service CPUQuota=200%

CPUQuota=200% — два ядра целиком. Ограничение через systemd переживает перезапуск службы, renice — нет.

Прежде чем убивать процесс через kill -9, попробуйте обычный systemctl stop. Жёсткое завершение базы данных стоит повреждённых файлов и долгого восстановления при следующем запуске.

Когда дело не в коде

Если нагрузка честная и постоянная — процессор Ryzen 9 7950X отрабатывает, просто ядер мало для задачи. Ступень меняется только вверх, с доплатой за оставшиеся дни оплаченного срока: подробности в статье Улучшение тарифа и доплата. Понижение обратно не предусмотрено, поэтому сначала убедитесь по графикам за неделю и месяц, что полка не разовая.