cpulimit - Limitando o uso da CPU por processo

Seu desktop (ou servidor) está redondo, até que aparece aquele processo morcego que suga todas as energias de sua CPU. Seu PC virou
uma carroça, e agora? O cpulimit é a solução! Vamos aprender a usar este simples utilitário?

[ Hits: 20.169 ]

Por: Fábio Berbert de Paula em 01/12/2014 | Blog: https://fabio.automatizando.dev


cpulimit



Conforme descrição do artigo, cpulimit é um utilitário que nos permite limitar o uso da CPU por processo. Ele nos fornece algumas formas de identificar o processo desejado, seja por nome do processo, PID ou caminho do executável.

Para instalar o programa em distribuições derivadas do Debian GNU/Linux, use o seguinte comando:

sudo apt-get install cpulimit

Em CentOS ou distribuições baseadas em RPM:

# yum install cpulimit

Para baixar o código-fonte, visite a página oficial do projeto no github:
Ou use o comando abaixo:

wget -C https://github.com/opsengine/cpulimit/archive/master.zip

Para compilar e instalar via código-fonte:

unzip master.zip
$ cd cpulimit-master


Em distribuições GNU/Linux compile com:

make

Já no FreeBSD:

gmake

Em seguida, instale o binário (root required):

# cp src/cpulimit /usr/bin

Sintaxe

Sua sintaxe é bem simples. Vamos a exemplos práticos.

Quero limitar o consumo de CPU do Skype para no máximo 40% da CPU. Vamos descobrir o PID do Skype:

pidof skype
6916

E então:

cpulimit -p 6916 -l 40

Agora, vamos supor que todos os dias o gzip torne seu desktop lento quando vai fazer aquele mega backup diário. Vamos limitar seu consumo usando o caminho do executável desta vez:

which gzip
/bin/gzip

cpulimit -P /bin/gzip -l 10

Como não temos pressa com relação ao tempo que o backup leva para ser feito, limitei o uso para 10%.

E agora o morcego maior do meu desktop, o Dropbox:

top

Vamos usar o nome do processo dessa vez:

cpulimit -e dropbox -l 30

Olha o resultado:

top

Bem melhor, né?!

Q: Devo usar root ou usuário comum para executar o cpulimit?
R: O programa roda normalmente como usuário comum, mas você só conseguirá limitar carga de processos cujo dono é o seu próprio usuário.


Até a próxima!

   

Páginas do artigo
   1. cpulimit
Outros artigos deste autor

Comparação entre Tcl e Perl

Minha caixa de ferramentas no GNU/Linux

Desenhar com o mouse na tela do desktop

Criando um painel de rede em PHP

Criando um contador de downloads com PHP e MySQL

Leitura recomendada

NPTL, Exec-Shield e outros palavrões que fazem seus programas crasharem

Recompilando o kernel com suporte a placas de rede Encore rtl8139D (Silan)

Transformando seu Linux em live!

Compilação e instalação do kernel 2.6.xx no Slackware

Como explicar o que é kernel para um leigo

  
Comentários
[1] Comentário enviado por demoncyber em 01/12/2014 - 01:19h

Olá Fábio,

Só adicionando existe um pacote pronto no FreeBSD.

pkg install cpulimit

Tem um outro detalhe bem importante eu trilhei as chamadas no programa do cpulimit, e ele tem que acessar o diretório /proc. Por questões de segurança e conveniência do FreeBSD, este não vem o com proc montando logo se faz necessário colocar no fstab, para montar ou montar manualmente.

mount -t procfs proc /proc

ou

echo 'proc /proc procfs rw 0 0' > /etc/fstab

Eu sinceramente na minha workstation em particular, não deixo o proc montado no FreeBSD, por não existir necessidade.

Abraços, espero ter ajudado com algo .. ;)

Referências:
[1] http://www.cyberciti.biz/faq/howto-freebsd-mount-procfs/ - FreeBSD Mount /proc File System Command

[2] Comentário enviado por fabio em 01/12/2014 - 01:33h


[1] Comentário enviado por demoncyber em 01/12/2014 - 01:19h:

Olá Fábio,

Só adicionando existe um pacote pronto no FreeBSD.

pkg install cpulimit

Tem um outro detalhe bem importante eu trilhei as chamadas no programa do cpulimit, e ele tem acessar o diretório /proc. Por questões de segurança e conveniência do FreeBSD, este não vem o com proc montando logo se faz necessário colocar no fstab para montar ou montar manualmente.

mount -t procfs proc /proc

ou

echo 'proc /proc procfs rw 0 0' > /etc/fstab

Eu sinceramente no minha workstation em particular não deixo o proc montado no FreeBSD por não existir necessidade.

Abraços, espero ter ajudado com algo .. ;)

Referências:
[1] http://www.cyberciti.biz/faq/howto-freebsd-mount-procfs/ - FreeBSD Mount /proc File System Command


Obrigado pela aula de FreeBSD! Não fazia ideia disso. :)

[3] Comentário enviado por albfneto em 01/12/2014 - 11:30h

Dica muito boa, excelente. Favoritada

[4] Comentário enviado por removido em 01/12/2014 - 21:33h

Aqui o campeão de consumo é o Firefox. Mas não chega a 10%.

Tem usuários que reclamam de processos elevando o consumo, taí uma ótima dica pra solucionar o problema.
Favoritado!

[5] Comentário enviado por quantux em 01/12/2014 - 23:47h

Ótima dica, principalmente quando se está usando uma virtualbox, pra não fazer o sistema pegar tudo. O Firefox aqui também é um grande problem, chegando até a 25% ! :/ Muito top! Vlw.

[6] Comentário enviado por fabio em 01/12/2014 - 23:59h

Ouvi dizer que o Firefox a 5% de CPU roda decentemente. Não testei porque o aposentei em prol do Chromium.

[7] Comentário enviado por fulllinux em 02/12/2014 - 11:12h

Simples, ótimo e muito útil!!!

[8] Comentário enviado por removido em 02/12/2014 - 22:10h

Uma aferição sem muita acuidade, mas dá pra termos alguma noção do consumo de CPU dos navegadores.

Em repouso:
- Firefox: 4,8 a 5,7%
- Chrome: 1,8 a 2,0%

No Youtube (uma aba):
- Firefox: 11 a 13%
- Chrome: 2,1 a 8%

Vou passar a usar mais o Chrome a partir de agora.

[9] Comentário enviado por cesar em 08/12/2014 - 15:55h

Gostei, não sabia que podíamos fazer isso.

[]'s

[10] Comentário enviado por leoberbert em 08/12/2014 - 20:26h

Mandou bem Fabio! Eu já conhecia e inclusive uso em algumas situações para evitar o alto consumo e overhead da máquina!

[11] Comentário enviado por dk_ em 31/12/2014 - 10:23h

Show de bola esse artigo, vou testar no meu dropbox =D

[12] Comentário enviado por removido em 07/01/2015 - 08:51h


Fabio , muito bom o topico.

Estou com uma duvida, tenho um servidor de monitoramento com o Nagios, ele esta consumindo muito deste servidor. cerca de 40%

cpulimit -e nagios -l 20
me apresenta as mensagens
Process 2896 detected
Process 2896 dead!
Process 2905 detected
Process 2905 dead!
Process 2911 detected
Process 2911 dead!
Process 2920 detected
Process 2920 dead!
Process 9234 detected
Process 9234 dead!

isto esta correto? esta diminuindo a porcentagem destes processos children?

[13] Comentário enviado por fabio em 07/01/2015 - 08:57h


[12] Comentário enviado por rafaelsilvaa10 em 07/01/2015 - 08:51h


Fabio , muito bom o topico.

Estou com uma duvida, tenho um servidor de monitoramento com o Nagios, ele esta consumindo muito deste servidor. cerca de 40%

cpulimit -e nagios -l 20
me apresenta as mensagens
Process 2896 detected
Process 2896 dead!
Process 2905 detected
Process 2905 dead!
Process 2911 detected
Process 2911 dead!
Process 2920 detected
Process 2920 dead!
Process 9234 detected
Process 9234 dead!

isto esta correto? esta diminuindo a porcentagem destes processos children?


Sim, a medida que ele acusa o "detected", está atuando sobre o processo. O lance aí é que o processo tem tempo de vida curto, então ele também acusa quando o processo finaliza.

Se não tiver surtindo efeito com os children, tenta identificar o PID do processo pai e executar o comando por PID.

[]'s

[14] Comentário enviado por removido em 07/01/2015 - 09:04h


top - 09:04:03 up 42 days, 17:22, 5 users, load average: 9.27, 10.60, 10.50
Tasks: 277 total, 3 running, 274 sleeping, 0 stopped, 0 zombie
Cpu(s): 27.2%us, 11.6%sy, 0.0%ni, 51.6%id, 9.2%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 20548292k total, 18367380k used, 2180912k free, 556140k buffers
Swap: 4194296k total, 172k used, 4194124k free, 9941108k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21033 mysql 15 0 14.4g 5.1g 5368 S 79.7 26.0 227:37.46 mysqld
31127 apache 16 0 157m 23m 5856 R 34.2 0.1 0:01.03 php
23136 nagios 25 0 203m 50m 1372 S 19.9 0.2 156:05.65 nagios

Processo é o Nagios. este PID 23136 , nao é o processo pai?

logo dei um ps aux | grep 23136
[root@lnxaphmon01 ~]# ps aux | grep 23136
root 13831 0.0 0.0 63300 844 pts/4 S+ 09:05 0:00 grep 23136
nagios 23136 16.5 0.2 207876 51296 ? Rsl Jan06 156:17 /usr/local/dasa mon/nagios/bin/nagios -d /usr/local/dasamon/nagios/etc/nagios.cfg

Qual o processo pai?


[15] Comentário enviado por fabio em 07/01/2015 - 09:26h

Aparentemente é o 23136 (não uso Nagios), mas você pode se certificar procurando pelo arquivo do Nagios em /var/run.

Exemplo para o servidor MySQL:

# cat /var/run/mysqld/mysqld.pid
2254

Um abraço.

[16] Comentário enviado por removido em 07/01/2015 - 09:38h


Fabio Obrigado.
AChei os processos Pai
[root@lnxaphmon01 ~]# cpulimit -p 23136 -l 30
Process 23136 detected

Obs: esta rodando faz 20 min.... é normal demorar assim?

[17] Comentário enviado por fabio em 07/01/2015 - 09:41h


[16] Comentário enviado por rafaelsilvaa10 em 07/01/2015 - 09:38h


Fabio Obrigado.
AChei os processos Pai
[root@lnxaphmon01 ~]# cpulimit -p 23136 -l 30
Process 23136 detected

Obs: esta rodando faz 20 min.... é normal demorar assim?


O cpulimit é residente. Vai ficar rodando até você o cancelar com Ctrl+c. Se você parar o Nagios (pai), ele vai continuar rodando esperando o processo iniciar novamente.

[18] Comentário enviado por removido em 07/01/2015 - 09:47h


vamos supor, deixei o cpulimit rodando e fechei o terminal. ele continua ativo ?

[19] Comentário enviado por fabio em 07/01/2015 - 09:50h


[18] Comentário enviado por rafaelsilvaa10 em 07/01/2015 - 09:47h


vamos supor, deixei o cpulimit rodando e fechei o terminal. ele continua ativo ?


Não. Neste caso você precisará usar o comando nohup pra deixar ele rodando em background.

$ nohup cpulimit ... &

[20] Comentário enviado por LckLinux em 08/02/2020 - 08:37h

Grato, por essa boa dica tua \o/

[21] Comentário enviado por linersantos em 09/06/2020 - 10:46h

Cara, valeu pela dica mas to com umas duvidas:
O gzip no meu ocupa muita memoria e eu executei o cpulimit mas eu preciso ficar com o terminal aberto pq se eu fecho o terminal em que eu executei o cpulimit, o gzip volta às alturas. É normal isso?
Mais uma vez, valeu pela dica :)

[22] Comentário enviado por fabio em 09/06/2020 - 10:58h


[21] Comentário enviado por linersantos em 09/06/2020 - 10:46h

Cara, valeu pela dica mas to com umas duvidas:
O gzip no meu ocupa muita memoria e eu executei o cpulimit mas eu preciso ficar com o terminal aberto pq se eu fecho o terminal em que eu executei o cpulimit, o gzip volta às alturas. É normal isso?
Mais uma vez, valeu pela dica :)


Combine o cpulimit com o comando nohup, daí quando você sair do terminal ele continua em execução.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts