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_bytes
Les 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 sousszMyGroup
jusqu'à 512 Mo de mémoire physique et jusqu'à 1 024 Mo de swap, puis :sudo cgexec -g memory:szMyGroup szMyProgram
qui exécutera votre programme sous le
szMyGroup
groupe 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
pgrep
avec 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=!#:4
Le 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.