How to set a memory limit for a specific process?

I tried to execute mpiexec -16 ... on a 384 GB RAM server, but it induced OOM Killer and was aborted.

How can I set a memory limit for mpiexec execution?

I know ulimit, but it might affect other processes.

Thank you.


I think this can be done using cgroups:

Create a cgroup named mpigroup (or whatever name you choose) with a memory limit (of 50GB, for example):

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

Then, if mpiexec is already running, bring it into this cgroup:

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

Or execute mpiexec within this cgroup:

cgexec -g memory,cpu:mpigroup mpiexec -16 ...