Limitar a memória RAM dos usuários com cgroups não funciona (para mim)

Limitar a memória RAM dos usuários com cgroups não funciona (para mim)

Me cadastrei porque não consegui rodar cgroups com vários tutoriais/comentários/o que você encontrar no google. Quero limitar a quantidade de memória RAM que um usuário específico pode usar. A Internet diz "cgroups". Meu servidor de teste está executando o Ubuntu 14.04. Você pode dividir os tutoriais mencionados em duas categorias. Defina limites diretamente usando echo e use configurações específicas. Nenhum dos dois está funcionando para mim.

Configurando limites usando echo

cgcreate -g cpu,cpuacct,...:/my_group

termina sem nenhum aviso. Quando tento correr

echo 100M > memory.limit_in_bytes

apenas diz "não permitido" mesmo ao usar o sudo. Eu nem chego a limitar outro usuário.

Definir limites usando configuração

Eu li sobre dois arquivos de configuração. Então aqui estão meus arquivos de configuração:

cgconfig.conf

mount {
    memory  = /cgroup/memory;
}

group limit_grp {
        memory {
                memory.limit_in_bytes=100M;
                memory.memsw.limit_in_bytes=125M;
        }
}

cgrules.conf

testuser    memory    limit_grp

Quando eu corro

cgconfigparser -l /etc/cgconfig.conf

ele é montado no systemd. Agora eu faço logon com testuser, executo uma tarefa que consome muita memória - e ela é executada sem me importar com meu limite.

Tentei reiniciar, nada mudou. Mesmo algumas tentativas estranhas de usar a configuração do kernel não funcionaram. Sou novo no cgroups e não esperava que fosse tão complicado. Eu apreciaria qualquer sugestão para o meu tópico. Agradeço antecipadamente!

Responder1

O motivo pelo qual você está vendo esse comportamento provavelmente se deve ao fato de sua sessão de login já ter um grupo de limite de memória associado, e o processo está herdando isso, de acordo com a configuração do systemd.

Verifique o cgroup do seu processo em execução com:

cat /proc/pid/cgroup

...e você poderá ver algo como:

13:name=systemd:/user/0.user/2.session
12:debug:/
11:pids:/
10:net_prio:/user/0.user/2.session
9:perf_event:/user/0.user/2.session
8:net_cls:/user/0.user/2.session
7:freezer:/user/0.user/2.session
6:devices:/user/0.user/2.session
5:memory:/user/0.user/2.session
4:blkio:/user/0.user/2.session
3:cpuacct:/user/0.user/2.session
2:cpu:/
1:cpuset:/

Supondo que você não queira esse comportamento, você pode usar seu cgroup personalizado com edição /etc/systemd/logind.confe remoção do controlador de memória memoryda Controllerslinha.

Responder2

Eu tive um problema semelhante (no Fedora 29): parecia que meu /etc/cgconfig.conffoi completamente ignorado. Correndo

sudo systemctl enable cgconfig

e a reinicialização resolveu o problema.

informação relacionada