- 创建一个
mpiggroup
(名字随意),并设置内存限制(例如50GB)
cgcreate -g memory,cpu:mpigroup
cgset -r memory.limit_in_bytes=$((50*1024*1024*1024)) mpigroup
- 如果进程在运行,则将这个运行进行加入到cgroup
cgclassify -g memory,cpu:mpicgroup $(pidof mpiexec)
- 如果是启动进程,则使用
cgexec
cgexec -g memory,cpu:mpigroup mpiexec COMMAND
cgexec
有一个--sticky
参数:如果使用--sticky
,则cgred
服务(是cgrulesengd
进程)就不会更改执行命令进程和它的子进程。这样不仅启动的命令会按照cgexec
指定的cgroup运行,这个命令启动的子命令也会继承cgexec
指定的cgroup。这样即使和cgrules.conf
配置冲突(cgred
服务使用的配置)也不影响。否则,虽然
cgexec
启动的命令可以指定cgroup,但是命令启动的子进程就会收到cgrules.conf
配置的限制,而不是启动时候cgexec
指定的cgroup。参考
man cgexec
同样,
cgclassify
也是有一个--sticky
,使用方法相同,即使用--sticky
时,可以避免cgrules.conf
影响作用于进程和子进程。
注意
:
cgclassify
和cgset
也可以不实用任何参数,即不使用-g memory,cpu:mpicgroup
,此时是cgred
服务会作用于进程,按照cgrules.conf
配置来调整进程,所以也是非常方便的。