ZaLinux.ru

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

Перегрев и тормоза компьютера

Некоторые программы в процессе своей работы нагружают центральный процессор на 100%. Это нормально и процессоры предназначены работать на максимальных своих частотах. Тем не менее, возможно возникновение сопутствующих проблем:

  • перегрев компьютера
  • подвисания операционной системы, «тормоза»

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

Обычно не нужно ограничивать количество процессорного времени, которое доступно для использования программой. Если процессор из-за интенсивной работы начинает перегреваться, то система сбрасывает частоты, то есть центральный процессор просто начинает медленнее работать. Это называется троттлинг. То есть имеется встроенная защита от того, чтобы процессор не сгорел. Если вы сталкиваетесь с перегревом и троттингом, то рекомендуется выполнить:

  • чистку компьютера от пыли (особенно актуально для ноутбуков после нескольких лет эксплуатации)
  • проверку и замену термопасты (актуально для используемых много лет настольных компьютеров)

Это может значительно улучшить ситуацию и ваша система будет работать быстрее за счёт того, что ЦПУ не будет сбрасывать частоты.

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

Если у вас система подвисает, начинает тормозить из-за слишком большой нагрузки на процессор, то можно изменить приоритет процесса. В Linux за это отвечает величина nice. Если вы понизите приоритет программы, то она всё равно будет работать на полную. Но если вы будете выполнять другие действия на компьютере, то центральный процессор сначала будет обрабатывать ваши действия в других программах и только затем, по остаточному принципу, будет предоставлять процессорные мощности «тяжёлой» программе.

Тем не менее, если вам действительно нужно ограничить мощность процессора, которую может использовать определённая программа, то об этом сказано ниже.

Ограничение использование центрального процессора (с помощью cpulimit)

Изучим как пользоваться cpulimit.

cpulimit – это простая программа, которая пытается ограничить использование ЦПУ процессом (величина выражена в процентах, а не во времени CPU). Это полезно для контроля длительных задач требующих сильной нагрузки на процессор, когда вы не хотите, чтобы они слишком сильно нагружали систему и мешали работе. Примером таких задач может быть: создание резервной копии системы или большого количества файлов, сжатие в архив большого объёма данных, брут-форс паролей и другие операции. Программа cpulimit не влияет на значение nice или другие способы планирования приоритета, она работает с настоящим использованием ЦПУ. Кроме того, эта программа может динамически и быстро адаптироваться к общей нагрузке на систему.

Если у вашей машины один процессор, вы можете ограничить процент от 0% до 100%, что означает, если вы, к примеру, установите 50%, процентов, то ваш процесс не может использовать более чем 500 миллисекунд времени центрального процессора каждую секунду. Но если на вашей машине четыре процессора, то процент можно устанавливать от 0% до 400%. Так установка лимита на 200% означает использование не более чем половины имеющейся мощности. В любом случае, процент — это то же самое, что вы видите когда запускаете программу top.

cpulimit должен быть запущен по крайней мере тем же пользователем от которого запущен контролируемый процесс. Но намного лучше, если вы запустите cpulimit от root, чтобы иметь более высокий приоритет и точный контроль.

cpulimit также ограничивает дочерние процессы указанной программы.

Установка cpulimit (в Ubuntu, Linux Mint, Kali Linux, Debian и другие его производные):

sudo apt update
sudo apt install cpulimit

Команда запуска cpulimit имеет следующий вид:

cpulimit [ЦЕЛЬ] [ОПЦИИ...] [-- ПРОГРАММА С ОПЦИЯМИ]

Изучим опции cpulimit:

   ЦЕЛЬ должна быть в точности чем-то из:
      -p, --pid=N        pid процесса
      -e, --exe=ФАЙЛ     имя исполнимого файла программы
                         Опция -e работает только если
                         cpulimit запущена с правами администратора.
      -P, --path=ПУТЬ    абсолютный путь
                         до исполнимой программы
   ОПЦИИ
      -b  --background   запуск в фоне
      -f  --foreground   запуск целевого процесса в фоне и ожидание его выхода
      -c  --cpu=N        переписать определение ЦПУ на машине
      -l, --limit=N      разрешённые для использования проценты cpu.
                         На одноядерных системах от 1 - 100, на многоядерных системах
                         может быть выше (обязательная опция)
      -m, --monitor-forks  Просмотр детей/форков целевого процесса
      -q, --quiet        запуск в тихом режиме (печатаются только ошибки).
      -k, --kill         завершить процесс, выходящий за лимиты
                         вместо того, чтобы ограничивать его.
      -r, --restore      Восстановить процессы, после того, как они
                         были завершены. Работает с флагом -k.
      -s, --signal=SIG   Отправить этот сигнал наблюдаемому процессу, когда cpulimit выходит.
                         Сигнал должен быть указан как номер, или 
                         SIGTERM, SIGCONT, SIGSTOP и т.д. SIGCONT это значение по умолчанию.
      -v, --verbose      показать контрольную статистику
      -z, --lazy         выйти если нет подходящего целевого процесса,
                         или если он завершился
          --             Это финальная опция CPUlimit. Все последующие
                         опции предназначены для другой запускаемой программы.
      -h, --help         показать справку и выйти

Примеры запуска cpulimit

Предположим, вы запустили foo --bar и вы обнаружили с помощью top или ps, что этот процесс использует всю мощность вашего ЦПУ, вы можете или:

Ограничить использование CPU процессом воздействуя на исполнимый файл программы (примечание: аргумент "--bar" пропущен):

sudo cpulimit -e foo -l 50

Ограничить использование CPU процессом воздействуя на, который показывает ps:

sudo cpulimit -p 1234 -l 50

Как и -e, но использует абсолютный путь:

sudo cpulimit -P /usr/bin/foo -l 50

Полезно для скриптов, где вы хотите троттлить последнюю запущенную команду:

sudo cpulimit -p $! -l 25 -b

Запуск веб-браузера Firefox и ограничение использование CPU 20% процентами:

sudo cpulimit -l 20 firefox

Флаг -c устанавливает количество ядер ЦПУ, которые, как начинает думать программа, доступны. Обычно программа правильно определяет количество ядер, но это значение можно переписать:

sudo cpulimit -c 2 -p 12345 -l 25

Запуск программы Firefox и остановка процесса, если он будет использовать более 20% CPU.

sudo cpulimit -l 20 -k firefox

Троттлить процесс 1234 на 20% использования CPU. Если cpulimit настроен для выхода, то он отправляет наблюдаемому процессу сигнал SIGTERM.

sudo cpulimit -l 20 -p 1234 -s SIGTERM

Примеры запуска в cpulimit программы с опциями

Запуск веб-браузера Firefox в приватном режиме и ограничение использование центрального процессора на 25%:

sudo cpulimit -l 25 -- firefox -private

Запуск программы aircrack-ng с опциями для взлома пароля Wi-FI:

cpulimit -l 400 -- aircrack-ng -w newrockyou.txt capture-01.cap

Ещё раз обратите внимание, как именно считается выделяемый процент. Одно ядро – это 100% Допустим, на компьютере восемь ядер, тогда максимально можно установить значение 100% * 8 = 800%, что соответствует стопроцентному использованию всех восьми ядер. Если мы хотим, чтобы использовалось только половина процессорной мощности, то нужно указать 400%, то есть -l 400.

Контроль использования количества CPU выполняется отправкой процессу сигналов SIGSTOP и SIGCONT POSIX.

cpulimit  всегда отправляет сигналы SIGSTOP и SIGCONT процессу, оба они нужны для верификации, что она может контролировать его и ограничивать среднее количество потребляемого ЦПУ. Это может привести к вводящим в заблуждение (раздражающим) сообщениям управления заданиями, которые показывают, что задание было остановлено (когда на самом деле оно действительно было остановлено, но немедленно перезапущено). Это также может вызвать проблемы с интерактивными оболочками, которые обнаруживают или иным образом зависят от SIGSTOP/SIGCONT. Например, вы можете разместить задание на переднем плане, но вы только увидите, что оно немедленно остановлено и перезапущено в фоне.

При вызове с опциями -e или -P, cpulimit ищет любой процесс в /proc с именем, которое соответствует имени процессу в переданном аргументе. Более того, она использует первый экземпляр найденного процесса. Для управление определённым экземпляром используйте опцию -p и укажите PID.

Контроль нагрузки на центральный процессор создаваемой группой программ

CPUTool – это ещё одна утилита, которая управляет использованием ЦПУ и нагрузкой на систему. Она умеет ограничивать нагрузку от одной программы или группы процесса по заданному лимиту.

CPUTool работает отправляя сигналы SIGSTOP и SIGCONT.

Установка CPUTool (в производные Debian):

apt install cputool

Использование CPUTool:

cputool [-c PCNT] [-l LOAD] [[-p PID | -P PID] | [--] КОМАНДА ...]

Опции CPUTool:

    -p,  --pid <PID>              Управление использованием CPU процессом с указанным PID
    -P,  --pid-pgrp <PID>         Управление использованием CPU группой процессов с указанным PID.
    -c,  --cpu-limit <PCNT>       Ограничительный процент CPU для процесса. Целое число.
    -l,  --load-limit <LOAD>      Ограничение нагрузки процессом. Разрешены десятичные числа
    -v,  --verbose                Быть вербальной, -vv, больше вербальности, -vvv самая большая вербальность.
    -V,  --version                Показать версию.
    -h,  --help                   Показать справку

Как и для предыдущей программы, возможно более 100% процессорной мощности, например, для двухъядерного процессора можно указать до 200 и так далее.

Примеры запуска CPUTool

Ограничить PID 4711 на использование 75% одного ядра ЦПУ:

cputool -p 4711 -c 75

Запуск rsync для создания резервной копии только когда системная нагрузка не превышает 7.5:

cputool -l 7.5 -- rsync -av /home /backup/`date +%Y-%m-%d`/

Заключение

Итак, с помощью этих программ вы можете ограничить, насколько интенсивно ресурсоёмкие приложение и программы будут использовать центральный процессор. Если ваша проблема заключается в перегреве и троттлинге, то начните с очистки физического компьютера от пыли и улучшения системы охлаждения.

О том, как контролировать текущую частоту и температуру процессора в Linux смотрите здесь.

Рекомендуемые статьи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *