
Tenho vários processos com o mesmo nome - eles ocupam 100% do tempo da minha CPU, quero que não passe de 50%.
Como posso fazer isso sem instalar nenhum software extra?
Responder1
Para um mecanismo em nível de kernel para isso, você precisa ler sobre LinuxGrupos de controle. Esta é uma área ainda em desenvolvimento ativo, então você precisará garantir que o que você lê é consistente com o kernel que você possui (ou deseja instalar).
Embora você tenha dito para não instalar nada adicional, você pode considerar a instalação cgred
para automatizar a movimentação de processos com nomes correspondentes ao seu cgroup de CPU. No Debian, isso está no cgroup-bin
pacote.
Responder2
Você pode fazer isso com comandos bash shell, sleep, pgrep e pkill usando sinais STOP e CONT.
O one-liner a seguir fará com que os processos usem no máximo 50% do tempo total de CPU disponível. Ele será executado 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 seguindo o padrão processname, eles não podem ultrapassar 50% do uso da CPU, pois todos são parados e continuados ao mesmo tempo - o que significa que eles precisam compartilhar o tempo de CPU disponível entre eles, quando estão ativo. Isso garante que o limite seja atingido.
Existe um programa chamado cpulimit que faz aproximadamente a mesma coisa.
Responder3
Sem instalar nenhum software extra que você tenha nice
. A faixa de valores é de-20para19.
nice -20 some_command
dá some_command
oPrioridade máxima, e
nice 19 some_command
dá some_command
oprioridade mais baixa.
Responder4
como escrito acima poderia ser usado como um script para ajudar o OOM-killer Ou também impedir seu uso
diga quando a CPU geral atinge 75% por 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