Pular para o conteúdo

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?
Fábio Berbert de Paula fabio
Hits: 21.552 Categoria: Linux Subcategoria: Kernel
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. cpulimit

Kdenlive - Como desfocar/borrar rosto, área ou objetos em um vídeo

Mais uma política "suja" de marketing da Microsoft

Desktop Linux ganha fôlego enquanto distros refinam experiência e segurança

Criando Aplicativos Mobile com React Native

Utilizando o Buffer de Gravação no Editor Vim

Afinal, o que é o Ubuntu?

Tornando o kernel do OpenBSD enxuto

Controle de tráfego utilizando HTB no Debian Sarge

Novidades do Kernel 2.6.35

Aplicando patches no kernel

#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

Entre na sua conta para comentar.