Você pode definir a quantidade de CPU que um único processo pode ter. Se o processo realmente precisa de muita energia da CPU, você pode executar alguns comandos para dar a ele todos os ciclos de CPU ociosos (ciclos de CPU que você não precisa). Dessa forma, você nunca terá que sentar e olhar para o seu computador que não responde por muito tempo.
Neste artigo, vou mostrar como limitar o uso da CPU de um processo no Linux. Vou usar o CentOS 7 neste artigo. Mas qualquer distribuição Linux moderna deve funcionar. Então vamos começar.
Limitando o uso da CPU com nice e renice:
No Linux, as prioridades de cada processo em execução podem ser alteradas. Você pode definir prioridades mais altas para o processo que é mais importante para você do que um processo que está monopolizando sua CPU sem um bom motivo.
Cada processo no Linux tem um bom valor. O valor de nice determina qual processo tem prioridades mais altas e qual tem menos. O valor adequado pode ser entre -20 a 19. Um processo com o valor agradável de -20 terá a prioridade mais alta e usará a maioria dos ciclos de CPU. Um processo com o bom valor 19 terá a prioridade mais baixa e usará a CPU quando nenhum outro processo estiver usando apenas.
Existem duas maneiras de definir o valor ideal de um processo. Você pode iniciar um processo com o legais comando para definir um bom valor ao iniciar o processo. Ou você pode usar o Renice comando para definir um bom valor após o início de um processo.
Para definir um bom valor ao iniciar um processo, execute o processo da seguinte maneira:
$ nice -n NICE_VALUE COMMAND_TO_RUNNOTA: Aqui NICE_VALUE pode ser qualquer coisa de -20 a 19 e COMMAND_TO_RUN é qualquer comando que você deseja executar com o bom valor de NICE_VALUE.
Por exemplo, digamos, você deseja executar o dormir comando com o bom valor de 14. Execute o comando da seguinte maneira:
$ nice -n 14 sleep 40.000 &
Agora você pode verificar se o valor agradável está definido corretamente usando o comando top. Você pode listar todos os processos que iniciou (como seu usuário de login) com o seguinte comando:
$ ps -fl
Como você pode ver, o valor legal do processo é definido como 14.
Agora, se você deseja alterar o valor legal de seus processos existentes, então tudo que você precisa é o ID do processo (PID) do processo do qual você deseja alterar o valor legal. Você pode usar o ps aux comando ou o principal comando para encontrar o ID do processo ou PID.
Então você pode correr Renice comando da seguinte forma para alterar o valor legal de um processo existente:
$ sudo renice -n NEW_NICE_VALUE -p PROCESS_PID
Como você pode ver, o bom valor do processo com PID 6422 é alterado.
Limitando o uso da CPU com CGROUPS:
A forma completa de CGROUPS é Control Groups. É um recurso do kernel Linux usado para limitar recursos para processar grupos como (CPU, memória, permissões e muitos mais) no Linux.
Tudo que você precisa fazer é criar um novo grupo de processos e adicionar seus processos aos quais deseja limitar os recursos, a esse grupo. Simples!
As ferramentas de gerenciamento CGROUPS não são instaladas no CentOS 7 por padrão. Mas está disponível no repositório oficial de pacotes do CentOS 7.
Primeiro atualize o cache do repositório de pacotes YUM com o seguinte comando:
$ sudo yum makecache
Agora instale as ferramentas de gerenciamento CGROUPS com o seguinte comando:
$ sudo yum install libcgroup-tools
Agora pressione y e então pressione
Deve ser instalado.
Você pode limitar o uso da CPU de um único grupo. Por exemplo, você pode usar CGROUPS para dizer a um processo dentro de um CGROUP para usar, digamos, 100ms a cada 1000ms (ou .1s em cada 1s) de tempo de CPU.
Primeiro crie um CGROUP com o seguinte comando:
$ sudo cgcreate -g cpu: / cpulimitNOTA: Aqui, cpulimit é o nome do grupo que controla o CPU uso.
Agora, você tem que definir CPU.cfs_period_us e CPU.cfs_quota_us propriedade no cpulimit grupo.
Para este exemplo, 1000ms (milissegundos) ou 1000000us (microssegundos) deve ser definido como CPU.cfs_period_us propriedade e 100ms ou 100000us deve ser definido como CPU.cfs_quota_us propriedade.
Execute os seguintes comandos para definir essas propriedades para o cpulimit grupo:
$ sudo cgset -r cpu.cfs_period_us = 1000000 cpulimit$ sudo cgset -r cpu.cfs_quota_us = 100000 cpulimit
Agora você pode executar o seguinte comando para verificar se todas as propriedades estão definidas corretamente:
$ sudo cgget -g cpu: cpulimitNOTA: Aqui, cpulimit é o nome do CGROUP e CPU é o recurso que estou limitando.
Como você pode ver, CPU.cfs_period_us e CPU.cfs_quota_us estão configurados corretamente.
Agora, qualquer processo que você adicionar cpulimit CGROUP usará 1/10º (100000/1000000 = 1/10 = 0.1 = 10%) do total de ciclos de CPU.
Agora, para limitar a CPU de um processo, inicie o programa ou comando com cgexec do seguinte modo:
$ sudo cgexec -g cpu: cpulimit YOUR_COMMANDNOTA: Aqui, YOUR_COMMAND pode ser qualquer comando Linux válido.
Para provar que realmente funciona, primeiro irei executar o seguinte comando sem CGROUPS e depois com CGROUPS e mostrar os resultados.
$ dd if = / dev / zero of = out bs = 1M
Como você pode ver, sem CGROUPS, o comando usa 90% da CPU total.
Então, executei o mesmo comando com CGROUPS da seguinte maneira:
$ sudo cgexec -g cpu: cpulimit dd if = / dev / zero of = out bs = 1M
Como você pode ver, o uso da CPU é de 10% no máximo. O processo não está usando mais do que isso.
Então é assim que você usa CGROUPS para limitar o uso da CPU de um processo no Linux. Obrigado por ler este artigo.
Referências:
[1] https: // acesso.chapéu vermelho.com / documentation / en-us / red_hat_enterprise_linux / 6 / html / resource_management_guide / sec-cpu
[2] https: // linux.morrer.net / man / 1 / nice
[3] https: // linux.morrer.net / man / 8 / renice