web-dev-qa-db-fra.com

Comment limiter l'utilisation des ressources pour un processus donné?

J'ai un processus pour une application qui doit être exécuté, mais finit par utiliser beaucoup trop d'utilisation IO pour ce qu'elle fait. Et mon ordinateur se bloque vraiment, rendant impossible toute opération pendant son fonctionnement.

Je me demandais donc s’il existait un moyen de limiter IO usage, RAM et CPU pour un processus donné? Et ses sous-processus bien sûr.

Ceci est sur mon système Ubuntu 18.04 LTS.

10
user364819

Vous devez utiliser une combinaison de cgexecname__, cpulimitet ionicename__:

  1. Limite RAM et 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
    

    Les commandes ci-dessus créent un groupe de contrôle nommé szMyGroup(par exemple, group-great-uncle), définissez une limite pour les processus exécutés sous szMyGroupjusqu'à 512 Mo de mémoire physique et jusqu'à 1024 Mo de swap, puis:

    Sudo cgexec -g memory:szMyGroup szMyProgram
    

    qui exécutera votre programme sous le groupe de contrôle szMyGroupname__, s'assurant ainsi qu'il respecte les limites

  2. limiter le disque IO:

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

    La commande ci-dessus utilise pgrepavec en réutilisant des parties de la ligne de commande actuelle pour limiter son accès au disque de manière à ce qu’il n’utilise le disque que si aucun autre programme ne l’utilise

  3. Limiter le CPU:

    Sudo cpulimit --limit=25 --pid=!#:4
    

    La CPU du programme est maintenant limitée à 25% du maximum

Si le programme n'utilise pas beaucoup de ressources processeur pour commencer, réduisez la valeur de cpulimit à la moitié ou moins de ce qu'il utilise actuellement.

8
Fabby