Ограничить использование ЦП процессами — методы?

Ограничить использование ЦП процессами — методы?

Я хотел бы ограничить использование процессора процессом, скажем, до 10%.

Один из способов сделать это — запускать процесс непрерывно в течение 6 секунд каждую минуту и ​​приостанавливать его в остальное время.

Я не собираюсь менять приоритет процесса с помощью nice.

решение1

cpulimit(новеессылка на github здесь) кажется подходящим инструментом для этой работы — он позволяет контролировать использование процессора процессом по PID, имени процесса или абсолютному местоположению, а также устанавливать использование процессора в процентах от общего числа.

Из документации на странице sourceforge -

Примеры использования

Ограничьте процесс «bigloop» по имени исполняемого файла до 40% ЦП:

cpulimit --exe bigloop --limit 40
cpulimit --exe /usr/local/bin/bigloop --limit 40 

Ограничить процесс по PID до 55% ЦП:

cpulimit --pid 2960 --limit 55 

Запустите процесс из командной строки и ограничьте его до 40% (только в версии для разработчиков!):

cpulimit --limit 40 /etc/rc.d/rc.boinc start 

Cyberciti.biz имееткакэто также указывает на то, что вы, возможно, сможете использовать

-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.

Вместо --exe и т. д.

А для многоядерных процессоров процент следует устанавливать на основе 100 * количество ядер, так что двухъядерная система может допускать проценты до 150, а четырехъядерная — до 200.

решение2

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

Для Linux:

ИспользоватьСтресс:

stress — это намеренно простой генератор рабочей нагрузки для систем POSIX. Он накладывает на систему настраиваемый объем нагрузки на ЦП, память, ввод-вывод и диск. Он написан на языке C и является свободным программным обеспечением, лицензированным по лицензии GPLv2.

Вот пример вызова: на систему накладывается средняя нагрузка, равная четырем, путем указания двух процессов, связанных с ЦП, одного процесса, связанного с вводом-выводом, и одного процесса распределения памяти.

   $ stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 10s --verbose
   stress: info: [9372] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hdd
   stress: dbug: [9372] (243) using backoff sleep of 12000us
   stress: dbug: [9372] (262) setting timeout to 10s
   stress: dbug: [9372] (285) --> hogcpu worker 9373 forked
   stress: dbug: [9372] (305) --> hogio worker 9374 forked
   stress: dbug: [9372] (325) --> hogvm worker 9375 forked
   stress: dbug: [9372] (243) using backoff sleep of 3000us
   stress: dbug: [9372] (262) setting timeout to 10s
   stress: dbug: [9372] (285) --> hogcpu worker 9376 forked
   stress: dbug: [9375] (466) hogvm worker malloced 134217728 bytes
   stress: dbug: [9372] (382) <-- worker 9374 signalled normally
   stress: dbug: [9372] (382) <-- worker 9373 signalled normally
   stress: dbug: [9372] (382) <-- worker 9375 signalled normally
   stress: dbug: [9372] (382) <-- worker 9376 signalled normally
   stress: info: [9372] successful run completed in 10s

Для Windows:

ИспользоватьBES – Боевой кодер Shirase 1.4.5 / 1.5.2:

Бесплатное программное обеспечение, контролирующее использование ЦП для каждого процесса. «Активный» программный охладитель ЦП. BES — это небольшой инструмент, который ограничивает использование ЦП для «целевого» процесса: например, вы можете ограничить использование ЦП процессом, который будет использовать ЦП на 100%, до 50% (или любого желаемого процента). Благодаря этому вы можете комфортно использовать другие программы, выполняя что-то ресурсоемкое в фоновом режиме.

Ограничивая нагрузку на ЦП, вы также можете немедленно охладить ЦП, когда он становится слишком горячим. Это «активный» программный охладитель ЦП. Обычные мягкие охладители экономят энергию ЦП, переводя ЦП в спящий режим, когда он простаивает. Они пассивно ждут, пока ЦП не станет простаивать. BES более агрессивен: он охлаждает ЦП, замедляя процесс «нагрева», т. е. периодически заставляя ЦП простаивать в течение короткого времени. (Но вам следует установить более качественный аппаратный охладитель, если вам часто приходится использовать BES для этой цели. На самом деле, первое, что вам следует попробовать, — это удалить пыль вокруг радиатора (см. ниже). Активное мягкое охлаждение может быть интересным приемом, но в конце концов это всего лишь обходной путь. С другой стороны, если ваше приложение использует ЦП на 100% бессмысленно, позвольте BES сделать эту работу!)

введите описание изображения здесь

Вы также можете автоматизировать этот процесс с помощью командной строки Windows:

Следующая командная строка сообщает BES о необходимости следить за target.exe и, когда target.exe запустится, ограничить использование им ЦП, чтобы target.exe мог использовать ЦП не более (100 − процентов) %:

"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]

При желании можно использовать целое число от 1 до 99 в качестве процента. Если процент опущен или недействителен, автоматически используется последний известный действительный процент для target.exe (если это первый раз, когда вы нацеливаетесь на target.exe, будет применено уменьшение по умолчанию 33%, если процент не указан). Обратите внимание, что при запуске из командной строки BES будет наблюдать/ограничивать цель, а не просто ограничивать ее.

решение3

Для Windows:(Это всего лишь расширение ответа @Diogo.)

Как пользователь Windows, желающий просто нажать на один ярлык, чтобы нужная целевая программа автоматически запускалась с нужной скоростью ЦП, я обнаружил, что для этого требуется немного больше шагов, включая пакетный файл и некоторые пояснения относительно того, как именно реализовать части [percentage] и [--minimize] в предлагаемой командной строке:

"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]

Метод, который я в итоге использовал, следующий. Создайте Windowsпакетный файл, создайте файл с помощью текстового редактора и назовите его "[имя].bat" (например: something.bat). В файле введите следующее:

@echo off 
start "" "C:\path\to\bes.exe" "D:\path to\target.exe" 90 -m
start "" "D:\path to\target.exe"

где:

  • начать "", позволяет какБЭСи целевая программа для запускав то же время.
  • «C:\path\to\bes.exe» — точный путь к программе BES в кавычках,
  • «D:\path to\target.exe» — это точный путь к программе, с помощью которой вы хотите ограничить загрузку процессора. В кавычках:
  • 90процент снижения, в данном случае означает снижение лимита ЦП до 100-90= 10%
  • -m — запустить программу BES в свернутом виде (согласно инструкциям BES: "Параметр --minimize, или сокращенно -m, указывает BES запускаться в свернутом виде (отправляться в системный трей)."

Затем двойной щелчок по полученному .bat-файлу запустит целевую программу, при этом BES автоматически понизит производительность ЦП до желаемого уровня.

Связанный контент