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

11

J'ai un processus pour une application qui doit s'exécuter, mais qui finit par utiliser beaucoup trop d'E / S pour ce qu'elle fait. Et plante vraiment mon ordinateur, ce qui rend impossible de faire quoi que ce soit d'autre pendant qu'il fonctionne.

Je me demandais donc s'il y avait un moyen de limiter l'utilisation des E / S, la RAM et le CPU pour un processus donné? Et ses sous-processus bien sûr.

C'est sur mon système Ubuntu 18.04 LTS.


la source
2
@GreatUncleBulgaria Pas vraiment, sauf si vous voulez vous séparer de points de réputation. La réponse simple à ce que vous demandez est de simplement combiner ce que d'autres ont suggéré - ionice, renice- et peut-être des ulimit -scommandes, et c'est tout.
Sergiy Kolodyazhnyy
@GreatUncleBulgaria Pas familier, cgroups-iodonc je n'en ai aucune idée :)
Sergiy Kolodyazhnyy
Question potentiellement liée: askubuntu.com/q/538992/295286 Les réponses y mentionnent des cgroups, mais pas grand chose d'autre, donc. . . peut être ?
Sergiy Kolodyazhnyy
1
@SergiyKolodyazhnyy: On dirait que quelqu'un a nettoyé les commentaires!

Réponses:

8

Vous devez utiliser une combinaison de tous cgexec, cpulimitet ionice:

  1. Limitez la RAM et le 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 cas group-great-uncle), définissent un plafond 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 szMyGroupgroupe de contrôle, garantissant ainsi qu'ils respectent les limites

  2. limiter le disque IO:

    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 utiliser uniquement le disque quand aucun autre programme ne l'utilise

  3. Limitez le CPU:

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

    Le CPU du programme est désormais 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.

Fabby
la source