Como limitar o uso de recursos para um determinado processo?

11

Eu tenho um processo para um aplicativo que precisa ser executado, mas acaba usando muito uso de IO para o que faz. E realmente trava meu computador, tornando impossível fazer qualquer outra coisa enquanto estiver em execução.

Então, eu queria saber se existe uma maneira de limitar o uso de IO, RAM e CPU para um determinado processo? E seus subprocessos, é claro.

Este é o meu sistema Ubuntu 18.04 LTS.


fonte
2
@GreatUncleBulgaria Na verdade, a menos que você queira se separar dos pontos de reputação. A resposta simples para o que você pede é apenas combinar o que os outros sugeriram - ionice, renice- e talvez ulimit -scomandar, e é isso.
Sergiy Kolodyazhnyy
@GreatUncleBulgaria Não estou familiarizado com cgroups-ioisso, não tenho ideia :) #
Sergiy Kolodyazhnyy
Pergunta potencialmente relacionada: askubuntu.com/q/538992/295286 As respostas mencionam cgroups, mas não muito mais. . . talvez ?
Sergiy Kolodyazhnyy
1
@SergiyKolodyazhnyy: Parece que alguém limpou os comentários!

Respostas:

8

Você deve usar uma combinação de todos cgexec, cpulimite ionice:

  1. Limite de RAM e 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
    

    Os comandos acima criam um grupo de controle chamado szMyGroup(por exemplo, no seu caso group-great-uncle), defina um limite para os processos executados com szMyGroupaté 512 MB de memória física e até 1024 MB de swap e, em seguida:

    sudo cgexec -g memory:szMyGroup szMyProgram

    que executará seu programa no szMyGroupgrupo de controle, garantindo que eles cumpram os limites

  2. limite o IO do disco:

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

    O comando acima é usado pgrepcom a reutilização de partes da linha de comando atual para limitar o acesso ao disco e usá-lo apenas quando nenhum outro programa estiver usando

  3. Limite a CPU:

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

    A CPU do programa está agora limitada a 25% do máximo

Se o programa não usar muita CPU para começar, diminua o valor de cpulimit para metade ou menos do que atualmente usa.

Fabby
fonte