Процессор загружен на 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 отрабатывает, просто ядер мало для задачи. Ступень меняется только вверх, с доплатой за оставшиеся дни оплаченного срока: подробности в статье Улучшение тарифа и доплата. Понижение обратно не предусмотрено, поэтому сначала убедитесь по графикам за неделю и месяц, что полка не разовая.