¿Cómo limitar el consumo de CPU de un grupo de procesos con herramientas estándar de GNU/Linux?

¿Cómo limitar el consumo de CPU de un grupo de procesos con herramientas estándar de GNU/Linux?

Tengo un montón de procesos con el mismo nombre: ocupan el 100% del tiempo de mi CPU, quiero que no sea más del 50%.

¿Cómo puedo hacer esto sin instalar ningún software adicional?

Respuesta1

Para conocer un mecanismo a nivel de kernel para esto, debe leer sobre LinuxGrupos de control. Esta es un área aún en desarrollo activo, por lo que deberá asegurarse de que lo que lea sea coherente con el kernel que tiene (o que está dispuesto a instalar).

Aunque dijo que no instalara nada adicional, podría considerar instalarlo cgredpara automatizar procesos en movimiento con nombres que coincidan con el grupo c de su CPU. En Debian, esto está en el cgroup-binpaquete.

Respuesta2

Puede hacerlo con los comandos bash shell, sleep, pgrep y pkill usando señales STOP y CONT.

La siguiente frase hará que los procesos utilicen un máximo del 50% del tiempo total de CPU disponible. Se ejecutará cada 100 milisegundos y luego se detendrá durante otros 100 milisegundos.

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

Aquí está el mismo código dividido en varias líneas para facilitar la lectura:

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

No importa cuántos procesos existan siguiendo el patrón de nombre de proceso, no pueden exceder el 50% del uso de la CPU, porque todos se detienen y continúan al mismo tiempo, lo que significa que necesitan compartir el tiempo de CPU disponible entre ellos, cuando son activo. Esto garantiza que se cumpla el límite.

Hay un programa llamado cpulimit que hace más o menos lo mismo.

Respuesta3

Sin instalar ningún software extra que tengas nice. El rango de valores es de-20a19.

nice -20 some_command

da some_commandelmás alta prioridad, y

nice 19 some_command

da some_commandelprioridad más baja.

Respuesta4

como está escrito anteriormente podría usarse como un script para ayudar a OOM-killer o también evitar su uso

decir cuando la CPU en general alcanza el 75% durante x minutos, ejecute 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

información relacionada