Como definir um limite de memória para um processo específico?

10

Tentei executar mpiexec -16 ...em um servidor de 384 GB de RAM, mas induziu o OOM Killer e foi abortado.

Como posso definir um limite de memória para mpiexecexecução?

Eu sei ulimit, mas isso pode afetar outros processos.

Obrigado.

Benben
fonte

Respostas:

9

Eu acho que isso pode ser feito usando cgroups:

Crie um cgroup chamado mpigroup(ou qualquer outro nome que você escolher) com um limite de memória (de 50 GB, por exemplo):

cgcreate -g memory,cpu:mpigroup
cgset -r memory.limit_in_bytes=$((50*1024*1024*1024)) mpigroup

Então, se o mpiexec já estiver em execução, leve-o para este cgroup:

cgclassify -g memory,cpu:mpigroup $(pidof mpiexec)

Ou execute mpiexecdentro deste cgroup:

cgexec -g memory,cpu:mpigroup mpiexec -16 ...
muru
fonte
O memorycontrolador não deveria ser suficiente cgcreate -g memory:mpigroup:?
heemayl
@heemayl deve ser. Eu só levantou este exemplo direto do wiki
Muru
configurações são armazenadas em / sys / fs / cgroup / memória /, e sudo trabalho é necessário, mesmo que não falho enquanto não usando sudo
Aquarius Poder
Consegui limitar a memória física a 2 GB, funcionou perfeitamente, mas a memória virtual ainda estava indo para 8 GB, mas estava tudo bem, porque o jogo do vinho usaria apenas a troca em vez de enviar todos os outros aplicativos Linux para troca, e isso fez com que todo o sistema funciona melhor! valeu!
Poder de Aquário