
Gostaria de limitar o uso da CPU de um processo a, digamos, 10%.
Uma maneira de fazer isso é executar o processo por 6 segundos contínuos a cada minuto e pausá-lo no resto do tempo.
Não pretendo alterar a prioridade do processo com Nice.
Responder1
cpulimit(mais recentelink do github aqui) parece ser a ferramenta para o trabalho - permite controlar o uso do processador de um processo por PID, nome do processo ou localização absoluta e definir o uso do processador em termos de porcentagem do total.
Nos documentos da página do sourceforge -
Exemplos de uso
Limite o processo 'bigloop' pelo nome do executável a 40% da CPU:
cpulimit --exe bigloop --limit 40
cpulimit --exe /usr/local/bin/bigloop --limit 40
Limite um processo por PID a 55% da CPU:
cpulimit --pid 2960 --limit 55
Inicie um processo por linha de comando e limite-o a 40% (somente na versão de desenvolvimento!):
cpulimit --limit 40 /etc/rc.d/rc.boinc start
Cyberciti.biz tem umcomoisso também indica que você talvez consiga usar
-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.
Em vez de --exe e assim por diante.
E para multiprocessadores, você deve definir a porcentagem com base em 100 * número de núcleos - portanto, um sistema duplo pode permitir porcentagens de até 150 e um quad core pode permitir até 200
Responder2
Como você não especificou seu sistema operacional, vou colocar aqui apenas uma opção para Windows e outra para Linux:
Para Linux:
UsarEstresse:
stress é um gerador de carga de trabalho deliberadamente simples para sistemas POSIX. Ele impõe uma quantidade configurável de CPU, memória, E/S e estresse de disco no sistema. Está escrito em C e é um software livre licenciado sob a GPLv2.
Aqui está um exemplo de invocação: uma média de carga de quatro é imposta ao sistema especificando dois processos vinculados à CPU, um processo vinculado a E/S e um processo alocador de memória.
$ 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
Para Windows:
UsarBES – Codificador de Batalha Shirase 1.4.5 / 1.5.2:
Software gratuito que controla o uso da CPU por processo. Cooler de CPU de software “ativo”. BES é uma pequena ferramenta que limita o uso da CPU para o processo que você “alvo”: por exemplo, você pode limitar o uso da CPU de um processo que usaria 100% da CPU, até 50% (ou qualquer porcentagem que você desejar) . Com isso, você pode usar outros programas confortavelmente enquanto faz algo que exige muito da CPU em segundo plano.
Ao limitar a carga da CPU, você também pode resfriar sua CPU imediatamente quando ela ficar muito quente. É um cooler de CPU de software “ativo”. Os soft-coolers convencionais economizam energia da CPU, fazendo com que a CPU durma quando ela está ociosa. Eles esperam passivamente até que a CPU fique ociosa. O BES é mais agressivo: ele resfria a CPU tornando o processo de “aquecimento” mais lento, ou seja, forçando periodicamente a CPU a ficar ociosa por um curto período de tempo. (Mas você deve instalar um cooler de hardware melhor se precisar usar BES com frequência para essa finalidade. Na verdade, a primeira coisa que você deve tentar é remover a poeira ao redor do dissipador de calor (veja abaixo). O resfriamento suave ativo pode ser um hack interessante , mas, afinal, é apenas uma solução alternativa. Por outro lado, se seu aplicativo usa 100% da CPU sem sentido, deixe o BES fazer o trabalho!)
Você também pode automatizá-lo usando a linha de comando do Windows:
A linha de comando a seguir diz ao BES para monitorar target.exe e - quando target.exe começar a ser executado - acelerar seu uso de CPU para que target.exe só possa usar CPU (100 - porcentagem)% no máximo:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
Opcionalmente, você pode usar um número inteiro entre 1 e 99 como porcentagem. Se a porcentagem for omitida ou inválida, a última porcentagem válida conhecida para target.exe será usada automaticamente (se esta for a primeira vez que o target.exe é direcionado, a redução padrão de 33% será aplicada, a menos que a porcentagem seja especificada). Observe que, quando iniciado a partir da linha de comando, o BES irá monitorar/limitar o alvo, e não apenas limitá-lo.
Responder3
Para Windows:(Esta é apenas uma expansão da resposta do @Diogo.)
Como um usuário do Windows deseja apenas clicar em um único atalho para que o programa de destino desejado seja executado automaticamente no acelerador de CPU desejado, descobri que eram necessárias mais algumas etapas envolvendo um arquivo em lote e alguns esclarecimentos necessários em relação a como exatamente implementar as partes [percentage] e [--minimize] na linha de comando sugerida:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
O método que acabei usando é o seguinte. Faça uma janelaarquivo em lote, crie um arquivo com um editor de texto e nomeie-o como "[nome].bat" (por exemplo: algo.bat). Dentro do arquivo, digite o seguinte:
@echo off
start "" "C:\path\to\bes.exe" "D:\path to\target.exe" 90 -m
start "" "D:\path to\target.exe"
onde:
- start "", permite tanto oBESe programa alvo a ser executadoao mesmo tempo.
- "C:\path\to\bes.exe" é o caminho exato para o programa BES entre aspas,
- "D:\path to\target.exe" é o caminho exato para o programa com o qual você deseja limitar a CPU. entre aspas,
- 90é uma porcentagem de redução, neste caso significa reduzir o limite da CPU para 100-90= 10%
- -m é para iniciar o programa BES minimizado (de acordo com as instruções do BES: "A opção --minimize, ou -m abreviadamente, diz ao BES para iniciar minimizado (enviado para a bandeja do sistema)."
Em seguida, clicar duas vezes no arquivo .bat resultante executará o programa de destino e será automaticamente acelerado para o nível de CPU desejado com BES.