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.
Vous devez utiliser une combinaison de cgexec
name__, cpulimit
et ionice
name__:
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 szMyGroup
jusqu'à 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 szMyGroup
name__, s'assurant ainsi qu'il respecte les limites
limiter le disque IO:
Sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
La commande ci-dessus utilise pgrep
avec 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
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.