Como limitar o consumo de CPU de um grupo de processos com ferramentas padrão GNU / Linux?

4

Eu tenho um monte de processos com o mesmo nome - eles ocupam 100% do tempo da minha CPU, eu quero que isso não seja mais que 50%.

Como posso fazer isso sem instalar nenhum software extra?

    
por unfa 29.05.2015 / 11:01

4 respostas

4

Para um mecanismo no nível do kernel, você precisa ler os Grupos de Controle do Linux. Esta é uma área ainda em desenvolvimento ativo, então você precisa garantir que o que você lê é consistente com o kernel que você tem (ou está disposto a instalar).

Embora você tenha dito para não instalar nada adicional, você pode considerar a instalação do cgred para automatizar os processos em movimento com nomes correspondentes para o seu cgroup da CPU. No Debian, isso no pacote cgroup-bin .

    
por 29.05.2015 / 11:27
3

Você pode fazê-lo com os comandos bash shell, sleep, pgrep e pkill usando os sinais STOP e CONT.

O seguinte one-liner fará com que os processos usem no máximo 50% do tempo total de CPU disponível. Ele vai rodar a cada 100 milissegundos e depois será interrompido por mais 100 milissegundos.

while [ True ]; do pkill -STOP processname; sleep 0.1s; pkill -CONT processname; sleep 0.1s; done

Aqui está o mesmo código dividido em várias linhas para facilitar a leitura:

while [ True ]
     do pkill -STOP processname
     sleep 0.1s
     pkill -CONT processname
     sleep 0.1s
done

Não importa quantos processos existam usando o padrão processname, eles não podem exceder 50% do uso da CPU, porque todos eles são interrompidos e continuados ao mesmo tempo - o que significa que eles precisam compartilhar o tempo de CPU disponível entre eles, quando eles estão ativos. Isso garante que o limite seja atendido.

Existe um programa chamado cpulimit que faz aproximadamente a mesma coisa.

    
por 29.05.2015 / 11:02
2

Sem instalar nenhum software extra, você tem nice . O intervalo de valores é de -20 para 19 .

nice -20 some_command

some_command a prioridade e

nice 19 some_command

some_command a prioridade mais baixa .

    
por 29.05.2015 / 11:04
0

como escrito acima pode ser usado como um script para auxiliar o OOM-killer ou impedir seu uso também

diz que quando o cpu atinge 75% durante x minutos, execute pkill.sh

 ../scripts/boottime/OOMkiller.sh

while [ true] ; 
    do  inxi -tcm5 > ~/cpu.log 
    sleep 0.5s 
    inxi -tcm5 >> ~/cpu/log | diff -m > ~/offender.log
done

for i in offender.log ;
    do ./scripts/pkill.sh
done

 ../scripts/pkill.sh
while [true] 
    do pgrep $(i) -STOP $PID
    pkill -STOP $PID
    sleep 0.5s 
    pkill -CONT $PID
done
    
por 29.05.2015 / 11:39