¿Cómo establecer un límite de memoria para un proceso específico?

10

Traté de ejecutar mpiexec -16 ...en un servidor de 384 GB de RAM, pero indujo a OOM Killer y fue abortado.

¿Cómo puedo establecer un límite de memoria para la mpiexecejecución?

Lo sé ulimit, pero podría afectar otros procesos.

Gracias.

Benben
fuente

Respuestas:

9

Creo que esto se puede hacer usando cgroups:

Cree un cgroup llamado mpigroup(o el nombre que elija) con un límite de memoria (de 50 GB, por ejemplo):

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

Luego, si mpiexec ya se está ejecutando, tráigalo a este cgroup:

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

O ejecutar mpiexecdentro de este cgroup:

cgexec -g memory,cpu:mpigroup mpiexec -16 ...
muru
fuente
¿No debería memoryser suficiente el controlador cgcreate -g memory:mpigroup?
heemayl
@heemayl debería ser. Acabo de levantar este ejemplo directamente de la wiki
muru
la configuración se almacena en / sys / fs / cgroup / memory /, y para trabajar sudo es necesario incluso si no falla mientras no se usa sudo
Aquarius Power
Logré limitar la memoria física a 2 GB, funcionó perfectamente, pero la memoria virtual todavía iba a 8 GB, pero eso estaba completamente bien porque el juego de vino solo usaría el intercambio en lugar de enviar todas las demás aplicaciones de Linux para intercambiar, y eso hizo ¡Todo el sistema funciona mejor! ¡Gracias!
Acuario Power