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?
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 DebianGNU/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:
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.
[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.
[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.
[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.
[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.
[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.
[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.