7

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

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

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

2 ответа2

6

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

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

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

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

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

Ограничить процесс с помощью PID до 55% CPU:

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.

3

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

Для Linux:

Используйте Стресс:

стресс - намеренно простой генератор рабочей нагрузки для систем 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 - Battle Encoder 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 будет наблюдать / ограничивать цель, а не только ограничивать ее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .