子Cgroup无进程时会自动删除吗?如何配置阻止其自动删除?
子Cgroup自动删除的原因及持久化配置
自动删除的原因
- Cgroup的默认行为(无论v1还是v2)是:当子Cgroup内没有任何活跃/僵尸进程,且没有挂载的子Cgroup、未绑定任何资源限制配置时,系统的Cgroup管理组件(如
systemd、cgmanager)会自动回收空Cgroup,以释放资源。 - 你的场景中,定期运行的进程结束后,子Cgroup处于完全空的状态,触发了系统的自动清理机制。
无进程时长期保留子Cgroup的配置方法
针对Cgroup v1
- 关闭自动清理触发机制
创建子Cgroup后,将对应控制器下的notify_on_release参数设为0(默认是1,表示空Cgroup时通知release_agent执行清理):
如果是通过# 以memory控制器为例,替换为你使用的控制器(如cpuset、cpu) echo 0 > /sys/fs/cgroup/memory/<父Cgroup名>/<子Cgroup名>/notify_on_releasecgexec创建Cgroup,可直接在创建时指定参数:cgexec --notify-on-release=0 -g memory:<父Cgroup名>/<子Cgroup名> <你的进程命令>
针对Cgroup v2
Cgroup v2采用统一层级管理,可通过以下两种方式保留空Cgroup:
- 冻结Cgroup
创建子Cgroup后,将cgroup.freeze设为1,冻结状态下的Cgroup不会被系统自动回收:echo 1 > /sys/fs/cgroup/<父Cgroup名>/<子Cgroup名>/cgroup.freeze - 绑定资源限制
给子Cgroup设置至少一项资源限制(如内存上限),系统会认为该Cgroup有配置价值,不会轻易删除:# 设置内存上限为1G,示例值可根据需求调整 echo 1G > /sys/fs/cgroup/<父Cgroup名>/<子Cgroup名>/memory.max
Systemd管理环境的额外注意
如果你的系统由systemd主导管理Cgroup,手动创建的Cgroup可能仍会被systemd的清理逻辑影响。建议通过编写Systemd Slice单元文件来创建持久化Cgroup:
- 在
/etc/systemd/system/下创建my-custom.slice文件:[Unit] Description=Custom Persistent Cgroup Slice [Slice] Deallocate=no # 关键配置:无进程时不释放Cgroup MemoryMax=1G # 可选:绑定资源限制增强持久化 - 重载Systemd并启动Slice:
systemctl daemon-reload systemctl start my-custom.slice
内容的提问来源于stack exchange,提问作者user3082802
相关产品推荐
相关产品推荐

