Como limitar o uso da CPU de um processo no Linux

Como limitar o uso da CPU de um processo no Linux
Na sua vida útil do Linux, você deve ter visto alguns processos ocupar todos os ciclos da CPU (90-99% de uso da CPU), deixando seu computador quase sem resposta até terminar. Isso pode estar tudo bem se o processo levar alguns segundos para ser concluído. Mas e se demorar muito tempo? Não é muito bom sentar e olhar para o seu computador que não responde por minutos e horas, certo? Bem, o Linux tem muitas ferramentas incríveis para fazer essas Não é muito bom processos para legal processos.

Você pode definir quanto CPU pode ter um único processo. Se o processo realmente precisar de muita energia da CPU, você pode executar alguns comandos para dar todos os ciclos ociosos da CPU (ciclos da 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, mostrarei como limitar o uso da CPU de um processo no Linux. Vou usar o CentOS 7 neste artigo. Mas qualquer distribuição moderna do Linux 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, o que é mais importante para você do que um processo que está monopolizando sua CPU sem um bom motivo.

Todo processo no Linux tem um bom valor. O valor de NICE determina qual processo tem prioridades mais altas e qual tem menor. Bom valor pode ser entre -20 e 19. Um processo com o valor bom de -20 terá a maior prioridade e usará mais ciclos de CPU. Um processo com o valor legal 19 terá a menor prioridade e usará a CPU quando nenhum outro processo o estiver usando apenas.

Existem duas maneiras de definir o bom valor de um processo. Você pode iniciar um processo com o legal 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 forma:

$ nice -n nice_value comando_to_run

OBSERVAÇÃO: 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ê quer executar o dormir comando com o bom valor de 14. Execute o comando da seguinte maneira:

$ nice -n 14 sono 40000 e

Agora você pode verificar se o bom valor está definido corretamente usando o comando superior. 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 bom valor do processo é definido como 14.

Agora, se você deseja alterar o bom valor de seus processos existentes, tudo o que você precisa é o ID do processo (PID) do processo do qual você deseja alterar o bom valor. 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 o seguinte para alterar o bom valor 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 os cgroups:

A forma completa de CGROUPS é COTROL Groups. É um kernel do Linux, usado para limitar recursos para processar grupos como (CPU, memória, permissões e muito mais) no Linux.

Tudo o 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 do CGROUPS não são instaladas no CentOS 7 por padrão. Mas está disponível no repositório oficial do pacote do CentOS 7.

Atualize primeiro o cache do repositório do pacote YUM com o seguinte comando:

$ sudo yum makecache

Agora instale as ferramentas de gerenciamento do CGROUPS com o seguinte comando:

$ sudo yum install libcgroup-tools

Agora pressione y e depois pressione .

Deve ser instalado.

Você pode limitar o uso da CPU de um único grupo. Por exemplo, você pode usar os cgroups para informar um processo em um cgroup para usar, digamos 100ms de cada 1000ms (ou .1s em cada 1s) do tempo da CPU.

Primeiro, crie um cgroup com o seguinte comando:

$ sudo cgcreate -g cpu:/cpulimit

OBSERVAÇÃO: 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) devem ser definidos como CPU.cfs_period_us propriedade e 100ms ou 100000us devem ser definidos para o 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: cpulimit

OBSERVAÇÃO: 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 definidos corretamente.

Agora qualquer processo que você adicionar cpulimit Cgroup usará 1/10º (100000/1000000 = 1/10 = 0.1 = 10%) dos ciclos totais da 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_command

OBSERVAÇÃO: Aqui, Your_Command pode ser quaisquer comandos linux válidos.

Para provar que ele realmente funciona, primeiro vou executar o seguinte comando sem cgroups e depois com cgroups e mostrar os resultados.

$ dd if =/dev/zero de = out bs = 1m

Como você pode ver, sem cgroups, o comando usa 90% da CPU total.

Em seguida, eu corri o mesmo comando com os cgroups da seguinte forma:

$ sudo cgexec -g cpu: cpulimit dd if =/dev/zero de = 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.

É assim que você usa os 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/documentação/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/sec-cpu

[2] https: // linux.morrer.net/homem/1/nice

[3] https: // linux.morrer.net/homem/8/renice