¿Cómo limitar el uso de recursos para un proceso dado?

11

Tengo un proceso para una aplicación que necesita ejecutarse, pero termina usando demasiado IO para lo que hace. Y realmente bloquea mi computadora, haciendo imposible hacer cualquier otra cosa mientras se está ejecutando.

Entonces, me preguntaba si hay una manera de limitar el uso de E / S, RAM y CPU para un proceso determinado. Y sus subprocesos, por supuesto.

Esto está en mi sistema Ubuntu 18.04 LTS.


fuente
2
@GreatUncleBulgaria No realmente, a menos que quieras separarte de los puntos de reputación. La respuesta simple a lo que pides es combinar lo que otros sugirieron ionice, renicey quizás ulimit -scomandos, y eso es todo.
Sergiy Kolodyazhnyy
@GreatUncleBulgaria No estoy familiarizado, cgroups-ioasí que no tengo idea :)
Sergiy Kolodyazhnyy
Pregunta potencialmente relacionada: askubuntu.com/q/538992/295286 Las respuestas allí mencionan cgroups, pero no mucho más, entonces. . . tal vez ?
Sergiy Kolodyazhnyy
1
@SergiyKolodyazhnyy: ¡Parece que alguien limpió los comentarios!

Respuestas:

8

Debe utilizar una combinación de todos cgexec, cpulimity ionice:

  1. 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 caso group-great-uncle), establecen un límite para los procesos ejecutados con szMyGrouphasta 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 szMyGroupgrupo de control, asegurando así que cumplan con los límites

  2. limitar el disco IO:

    sudo ionice --class 3 --pid $(pgrep -f szMyProgram)

    El comando anterior se usa pgrepcon la reutilización de partes de la línea de comandos actual para limitar su acceso al disco para usar solo el disco cuando ningún otro programa lo está usando

  3. 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.

Fabby
fuente