Гид по технологиям

Как ограничить использование CPU процессом в Linux

5 min read Linux Обновлено 04 Dec 2025
Ограничение CPU процесса в Linux
Ограничение CPU процесса в Linux

Как найти процесс с высокой загрузкой CPU

На Linux PID (идентификатор процесса) нужен, чтобы привязать ограничение к конкретному процессу. Несколько способов найти процессы с высокой загрузкой:

  • top — интерактивный монитор процессов.
  • htop — улучшенная версия top.
  • ps с сортировкой по %CPU.
  • pgrep или pidof для поиска по имени.

Пример команд и вывода:

top

Проверка загрузки CPU с помощью top

В колонке %CPU видно, сколько процентов CPU использует процесс. Запишите PID процессa с высокой нагрузкой.

Полезные команды:

ps aux --sort=-%cpu | head -n 10
pgrep -f my_heavy_process
pidof my_heavy_process

Совет: если процесс многопоточный, %CPU в top может превышать 100%, потому что он суммируется по потокам на всех ядрах.

Установка cpulimit

Cpulimit не всегда предустановлен. Установите пакет под вашей дистрибуцией:

Ubuntu / Debian:

sudo apt install cpulimit

Arch / Manjaro:

sudo pacman -S cpulimit

CentOS / RHEL (через EPEL):

sudo yum install epel-release
sudo yum install cpulimit

Если вы используете другую систему, ищите пакет cpulimit в репозиториях или собирайте из исходников.

Базовый синтаксис cpulimit

Cpulimit ограничивает процесс, привязываясь к процессу по PID, имени исполняемого файла или пути к нему.

Ключи для выбора процесса:

  • -p или –pid — указать PID
  • -e или –exe — имя исполняемого файла
  • -P или –path — абсолютный путь к исполняемому файлу

Примеры базового вызова:

cpulimit -p 12345
cpulimit -e myprogram
cpulimit -P /usr/bin/myprogram

Ограничение CPU процесса

Чтобы ограничить процесс с PID 81550 до 50% CPU:

sudo cpulimit -p 81550 --limit 50

Cpulimit будет периодически отправлять процессу SIGSTOP и SIGCONT, чтобы удерживать среднюю загрузку в заданных пределах.

Запустить cpulimit в фоне:

sudo cpulimit -p 81550 --limit 50 --background

Если параметр –background не сработал, добавьте амперсанд (&):

sudo cpulimit -p 81550 --limit 50 &

Проверьте результат в top или htop.

Низкая загрузка CPU с помощью cpulimit

Как видно на примере, команда dd снизила загрузку до ~48–50%.

Завершение процесса

Если вы хотите не ограничивать, а полностью остановить процесс, используйте опцию –kill:

sudo cpulimit -p 81550 --limit 50 --kill

Замечание: –kill попытается корректно завершить процесс. При необходимости используйте sudo kill -9 PID, но это крайняя мера.

Альтернативы и когда лучше не использовать cpulimit

Cpulimit подходит для быстрого ручного вмешательства. Однако у него есть ограничения:

  • Механизм основан на приостановке/возобновлении (SIGSTOP/SIGCONT). Это может влиять на время отклика и сетевые операции.
  • В контейнерах (Docker, LXC) cpulimit внутри контейнера может не дать ожидаемого эффекта. Для контейнеров ограничивайте ресурсы через orchestrator или cgroups на хосте.
  • Для сервисов systemd лучше использовать CPUQuota и cgroups — они более предсказуемы и устойчивы после перезапуска.

Примеры альтернатив:

  • nice / renice — изменяют приоритет планирования (не ограничивают процент, а снижают приоритет).
  • systemd (CPUQuota=/CPUWeight=) — ограничение на уровне cgroups.
  • cgroups v1/v2 — явное управление ресурсами для групп процессов.

Пример запуска команды с ограничением CPU через systemd:

sudo systemd-run --scope -p CPUQuota=50% --unit=limited dd if=/dev/zero of=/dev/null bs=1M

Для служб можно задать ограничение навсегда:

sudo systemctl set-property myservice.service CPUQuota=30%

Эти методы не зависят от сигналов SIGSTOP/SIGCONT и работают на уровне планировщика ядра.

Как уменьшить приоритет процесса

Если вы хотите не жестко ограничивать CPU, а дать процессу меньший приоритет, используйте nice и renice.

Запустить процесс с низким приоритетом:

nice -n 10 my_command

Изменить приоритет уже запущенного процесса:

sudo renice +10 -p 81550

Чем выше значение nice, тем ниже приоритет. Значения от -20 (высший приоритет) до +19 (низкий приоритет).

Диагностика и отладка

Если ограничение не работает, проверьте:

  • Применился ли cpulimit к правильному PID (процесс мог перезапуститься с новым PID).
  • Не является ли процесс системным (kernel thread) или уже запущен от другого пользователя.
  • Работаете ли вы в контейнере.
  • Нет ли ограничений со стороны cgroups или SELinux.

Полезные инструменты для детальной диагностики:

pidstat -p 81550 1 5   # показывает загрузку CPU по процессу с интервалами
ps -o pid,ppid,cmd,%cpu -p 81550
cat /proc/81550/status

Практическое руководство: быстрый SOP для админа

  1. Найдите процесс:
    • ps aux –sort=-%cpu | head
    • top / htop
  2. Определите, нужен ли процесс. Если нет — завершите его.
  3. Если процесс нужен, но грузит CPU, временно ограничьте cpulimit:
    • sudo cpulimit -p –limit <процент> –background
  4. Для долгосрочного контроля переведите сервис в systemd с CPUQuota или настройте cgroups.
  5. Мониторьте влияние: top, pidstat, systemd-cgtop.

Роли и быстрые чек-листы:

  • Для админа: проверить логи, назначение сервиса, настроить systemd CPUQuota.
  • Для разработчика: локально профилировать процесс, найти утечку ЦП, оптимизировать код.
  • Для пользователя рабочего стола: использовать System Monitor (GNOME) или cpulimit для локальных задач.

Когда cpulimit не подойдёт

  • Процесс делает блокирующие операции ввода-вывода и не чувствителен к приостановке.
  • Процесс — контейнерный воркер, где контейнер уже ограничён по CPU.
  • Требуются гарантированные SLA/SLI по CPU — лучше использовать cgroups и systemd для квотирования.

Фактбокс — важные моменты

  • Механизм cpulimit: отправка SIGSTOP/SIGCONT для регулировки средней загрузки.
  • nice/renice меняют приоритет, но не задают жесткий процент CPU.
  • systemd CPUQuota задаёт ограничение на уровне cgroup и работает даже после перезапуска службы.

Мини-методология выбора метода

  • Если нужно временно и локально — cpulimit.
  • Если нужен постоянный контроль для службы — systemd CPUQuota или cgroups.
  • Если задача — снизить влияние на систему, но не ограничивать CPU жёстко — nice/renice.

Критерии приёмки

  • CPU процесса после применения ограничения стабильно ниже заданного процента (среднее за 1–5 минут).
  • Функциональность процесса остаётся корректной (нет неожиданных таймаутов или ошибок).
  • Ограничение переживает перезапуск сервиса (для постоянных настроек применён systemd/cgroups).

Краткий глоссарий

  • PID — идентификатор процесса в системе.
  • cgroups — механизм группировки процессов и ограничения ресурсов.
  • CPUQuota — параметр systemd для ограничения CPU в процентах.

Часто задаваемые вопросы

В: Нужно ли запускать cpulimit от root? A: Для ограничения процессов других пользователей или системных процессов потребуется root; для процессов своего пользователя можно запускать без sudo.

В: Можно ли ограничить одновременнo несколько процессов? A: Да. Для каждого процесса запустите отдельный cpulimit либо объедините процессы в cgroup и ограничьте её.

В: Как восстановить нормальную работу после cpulimit? A: Остановите процесс cpulimit (find pid cpulimit и kill) или перезапустите целевой процесс; при остановке cpulimit процесс вернётся к нормальной загрузке.

Как ограничить использование CPU процесса

Важно следить за поведением приложения после ограничения. Иногда лучше оптимизировать код или архитектуру, чем постоянно ограничивать процесс.

Итог

Cpulimit полезен для быстрого вмешательства и локального контроля использования CPU. Для устойчивых и предсказуемых ограничений предпочтительнее systemd/cgroups. Выбирайте инструмент в зависимости от срока действия ограничения и среды (локальная машина, сервер, контейнер).

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Запуск Sticky Notes при включении Windows 11
Windows 11

Запуск Sticky Notes при включении Windows 11

Как исправить WDF_Violation в Windows
Windows

Как исправить WDF_Violation в Windows

Добавить Windows 11 в меню GRUB
Загрузчик

Добавить Windows 11 в меню GRUB

Удаление колонтитулов в Word — быстрое руководство
Microsoft Word

Удаление колонтитулов в Word — быстрое руководство

Ярлык «Свойства системы» в Windows 11
Windows

Ярлык «Свойства системы» в Windows 11

Как восстановить документ Microsoft Word
Руководства

Как восстановить документ Microsoft Word