Jak ograniczyć wykorzystanie zasobów dla danego procesu?

11

Mam proces aplikacji, która musi zostać uruchomiona, ale w końcu używa zbyt dużo użycia IO do tego, co robi. I naprawdę powoduje awarię mojego komputera, uniemożliwiając wykonywanie innych czynności podczas jego działania.

Zastanawiałem się więc, czy istnieje sposób na ograniczenie wykorzystania IO, pamięci RAM i procesora dla danego procesu? I oczywiście jego podprocesy.

To jest na moim systemie Ubuntu 18.04 LTS.


źródło
2
@GreatUncleBulgaria Nie bardzo, chyba że chcesz rozstać się z punktami reputacji. Prostą odpowiedzią na to, o co pytasz, jest po prostu połączenie tego, co sugerowali inni - ionice, renicei być może ulimit -spolecenia - i to wszystko.
Sergiy Kolodyazhnyy
@GreatUncleBulgaria Nie jestem zaznajomiony, cgroups-iowięc nie mam pojęcia :)
Sergiy Kolodyazhnyy
Potencjalnie powiązane pytanie: askubuntu.com/q/538992/295286 Odpowiedzi tam wspominają o grupach, ale niewiele więcej, więc. . . może ?
Sergiy Kolodyazhnyy
1
@SergiyKolodyazhnyy: Wygląda na to, że ktoś wyczyścił komentarze!

Odpowiedzi:

8

Należy użyć kombinacji wszystko cgexec, cpulimiti ionice:

  1. Ogranicz pamięć RAM i 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

    Powyższe polecenia tworzą grupę kontrolną o nazwie szMyGroup(np. W twoim przypadku group-great-uncle), ustaw limit procesów przebiegających szMyGroupdo 512 MB pamięci fizycznej i do 1024 MB wymiany, a następnie:

    sudo cgexec -g memory:szMyGroup szMyProgram

    który uruchomi Twój program w szMyGroupgrupie kontrolnej, zapewniając w ten sposób przestrzeganie limitów

  2. ogranicz IO dysku:

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

    Powyższe polecenie używa pgrepz ponownym użyciem części bieżącego wiersza polecenia w celu ograniczenia dostępu do dysku, aby korzystać z dysku tylko wtedy, gdy nie używa go żaden inny program

  3. Ogranicz procesor:

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

    Procesor programu jest teraz ograniczony do 25% maksimum

Jeśli program nie używa dużo procesora na początek, obniż wartość cpulimit do połowy lub mniej tego, co obecnie używa.

Fabby
źródło