J'ai un processus pour une application qui doit s'exécuter, mais qui finit par utiliser beaucoup trop d'utilisation d'E/S pour ce qu'elle fait. Et plante vraiment mon ordinateur, rendant impossible toute autre action pendant qu'il est en cours d'exécution.
Je me demandais donc s'il existait un moyen de limiter l'utilisation des E/S, de la RAM et du processeur pour un processus donné ? Et ses sous-processus bien sûr.
C'est sur mon système Ubuntu 18.04 LTS.
Meilleure réponse
Vous devez utiliser une combinaison de tous les cgexec , cpulimit et ionice :
-
Limiter 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_bytesLes commandes ci-dessus créent un groupe de contrôle nommé
szMyGroup(Par exemple, dans votre casgroup-great-uncle), fixez un plafond aux processus exécutés sousszMyGroupjusqu'à 512 Mo de mémoire physique et jusqu'à 1 024 Mo de swap, puis :sudo cgexec -g memory:szMyGroup szMyProgramqui exécutera votre programme sous le
szMyGroupgroupe de contrôle, s'assurant ainsi qu'ils respectent les limites -
limiter les E/S disque :
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)La commande ci-dessus utilise
pgrepavec la réutilisation de parties de la ligne de commande actuelle pour limiter son accès au disque pour n'utiliser le disque que lorsque aucun autre programme ne l'utilise -
Limitez le CPU :
sudo cpulimit --limit=25 --pid=!#:4Le CPU du programme est maintenant limité à 25 % du maximum
Si le programme n'utilise pas beaucoup de CPU pour commencer, réduisez la valeur de cpulimit à la moitié ou moins de ce qu'il utilise actuellement.