Como evitar que programas em execução consumam toda a RAM e CPU?

5

Eu tenho um problema irritante com o gerenciamento de recursos do Ubuntu. Freqüentemente acontece que alguns programas, como o navegador Google Chrome, consomem 100% da CPU e a maior parte da memória dos meus laptops.

Eu quero ter um sistema operacional responsivo o tempo todo, isso significa que eu quero ser capaz de alternar entre programas e mover meu mouse na tela ou alternar para um tty e dar comandos para o sistema operacional. Portanto, eu procuro uma maneira de configurar o sistema operacional para reservar, digamos 10% dos recursos do sistema para si mesmo. Atualmente o Ubuntu não se comporta desta maneira, frequentemente o chrome consome todo o meu CPU e memória e então o sistema não responde, e é claro que eu não posso esperar mais que um minuto ou dois então eu tenho que pressionar o botão liga / desliga.

Existe alguma maneira de tornar o Ubuntu sempre responsivo? Pelo menos na medida em que eu posso matar o programa com fome de recursos? (Eu sei que o kernel eventualmente matará alguns programas para liberar algum espaço, mas eu quero forçá-lo a fazê-lo mais rápido ou reservar mais recursos para si mesmo)

Version: UBUNTU 14.04
~$ uname -a
Linux spielplatz 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 8GB

Atualização (8 de outubro de 2017)

A melhor solução que encontrei até agora é usando cgroups. Existe um gist para isso.

    
por Mehdi Sadeghi 08.02.2015 / 20:23

1 resposta

3

Eu usei o cpulimit para "estrangular" programas que não usam muito o CPU antes (o Xfce4 Mailwatch Plugin fica suspenso e pega 100% da CPU algumas vezes). cpulimit é um:

  
    

ferramenta para limitar o uso da CPU de um processo

         

O cpulimit é um programa simples que tenta limitar o uso da CPU de um processo (expresso em porcentagem, não no tempo da CPU). Isso é útil para controlar trabalhos em lote, quando você não quer que eles comam muita CPU. Ele não age sobre o bom valor ou outras coisas prioritárias, mas sobre o uso real da CPU.
    Além disso, é capaz de se adaptar à carga geral do sistema, de forma dinâmica e rápida.

  

Ele funciona monitorando o processo de destino e enviando "os sinais SIGSTOP e SIGCONT para um processo, tanto para verificar se ele pode controlá-lo quanto para limitar a quantidade média de CPU que ele consome." Veja:

Ele deve deixar o restante do seu sistema operacional mais responsivo, mas eu tentei isso no Firefox e ele tende a torná-lo menos responsivo, então pode não ser a melhor resposta para o navegador Chrome. A pesquisa de formas de acelerar o Chrome pode ser mais proveitosa.

Se você quer apenas uma boa maneira de ver quanto CPU & amp; RAM está em uso, e que processos estão usando, eu sugiro um programa de monitoramento do sistema (como top , htop , eu prefiro conky ), então quando você vir algo comendo toda a sua cpu ou ram você pode fechar / reiniciar, etc.

Se você estiver interessado em saber quais programas serão programados para serem executados primeiro, consulte a prioridade de agendamento & amp; "gentileza". Talvez você possa tornar o Chrome mais "legal" sem prejudicá-lo.
Aqui está um clipe de info coreutils 'nice invocation' :

  
    

'nice' imprime "niceness" de um processo ou executa um comando com modificação     gentileza. "niceness" afeta quão favoravelmente o processo está programado     o sistema.

         

Valores de amabilidade variam de pelo menos de -20 (o processo tem alta prioridade     e obtém mais recursos, diminuindo assim outros processos) até 19     (o processo tem prioridade mais baixa e é executado lentamente, mas tem menos impacto     na velocidade de outros processos em execução). Alguns sistemas podem ter     maior variedade de valores de gentileza; Por outro lado, outros sistemas podem impor     limites mais restritivos. Uma tentativa de definir a gentileza fora do     intervalo suportado é tratado como uma tentativa de usar o mínimo ou máximo     valor suportado.

         

Um niceness não deve ser confundido com uma prioridade de agendamento, que     permite que os aplicativos determinem a ordem na qual os encadeamentos estão agendados     corre. Ao contrário de uma prioridade, uma gentileza é apenas um conselho para o agendador,     qual o agendador está livre para ignorar. Além disso, como um ponto de     terminologia, POSIX define o comportamento de 'bom' em termos de um     valor ", que é a diferença não-negativa entre uma gentileza e     niceness mínima. Embora 'legal' esteja em conformidade com o POSIX, sua documentação     e diagnósticos usam o termo "gentileza" para compatibilidade com     prática histórica.

  

E aqui estão alguns links de aparência útil sobre o agendamento

E o comentário / post do muru em Cgroups (em ArchWiki) parece bom, sobre limitar RAM, parece que pode limitar núcleos de CPU & amp; "compartilhamentos" também ( "Por padrão, todos os grupos têm 1024 compartilhamentos. Um grupo com 100 compartilhamentos receberá uma porção de ~ 10% do tempo de CPU" ).

O primeiro parágrafo do artigo do ArchWiki também menciona essa opção potencialmente útil, embora eu ache que eles são principalmente para limitar usuários / grupos, veja: man pam_limits & amp; man limits.conf

por Xen2050 08.02.2015 / 20:56