Tengo un proceso para una aplicación que necesita ejecutarse, pero termina usando demasiado uso de IO para lo que hace. Y realmente bloquea mi computadora, por lo que es imposible hacer cualquier otra cosa mientras se está ejecutando.
Entonces, me preguntaba si hay una forma de limitar el uso de IO, RAM y CPU para un proceso determinado. Y sus subprocesos, por supuesto.
Esto está en mi sistema Ubuntu 18.04 LTS.
Mejor respuesta
Debe usar una combinación de todos los cgexec
, cpulimit
y ionice
:
-
Límite de RAM y SWAP:
sudo cgcreate -g memory:/szMyGroup echo $(( 512 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.limit_in_bytes echo $(( 1024 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.memsw.limit_in_bytes
Los comandos anteriores crean un grupo de control llamado
szMyGroup
(Por ejemplo, en su casogroup-great-uncle
), establezca un límite para los procesos que se ejecutan enszMyGroup
hasta 512 MB de memoria física y hasta 1024 MB de intercambio y luego:sudo cgexec -g memory:szMyGroup szMyProgram
que ejecutará su programa bajo el
szMyGroup
grupo de control, asegurando así que se adhieren a los límites -
limitar el disco IO:
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
El comando anterior usa
pgrep
con la reutilización de partes de la línea de comandos actual para limitar su acceso al disco para usar el disco solo cuando ningún otro programa lo esté usando -
Limite la CPU:
sudo cpulimit --limit=25 --pid=!#:4
La CPU del programa ahora está limitada al 25% del máximo
Si el programa no usa mucha CPU para empezar, reduzca el valor de cpulimit a la mitad o menos de lo que usa actualmente.