You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子Cgroup无进程时会自动删除吗?如何配置阻止其自动删除?

子Cgroup自动删除的原因及持久化配置

自动删除的原因

  • Cgroup的默认行为(无论v1还是v2)是:当子Cgroup内没有任何活跃/僵尸进程,且没有挂载的子Cgroup、未绑定任何资源限制配置时,系统的Cgroup管理组件(如systemd、cgmanager)会自动回收空Cgroup,以释放资源。
  • 你的场景中,定期运行的进程结束后,子Cgroup处于完全空的状态,触发了系统的自动清理机制。

无进程时长期保留子Cgroup的配置方法

针对Cgroup v1

  1. 关闭自动清理触发机制
    创建子Cgroup后,将对应控制器下的notify_on_release参数设为0(默认是1,表示空Cgroup时通知release_agent执行清理):
    # 以memory控制器为例,替换为你使用的控制器(如cpuset、cpu)
    echo 0 > /sys/fs/cgroup/memory/<父Cgroup名>/<子Cgroup名>/notify_on_release
    
    如果是通过cgexec创建Cgroup,可直接在创建时指定参数:
    cgexec --notify-on-release=0 -g memory:<父Cgroup名>/<子Cgroup名> <你的进程命令>
    

针对Cgroup v2

Cgroup v2采用统一层级管理,可通过以下两种方式保留空Cgroup:

  1. 冻结Cgroup
    创建子Cgroup后,将cgroup.freeze设为1,冻结状态下的Cgroup不会被系统自动回收:
    echo 1 > /sys/fs/cgroup/<父Cgroup名>/<子Cgroup名>/cgroup.freeze
    
  2. 绑定资源限制
    给子Cgroup设置至少一项资源限制(如内存上限),系统会认为该Cgroup有配置价值,不会轻易删除:
    # 设置内存上限为1G,示例值可根据需求调整
    echo 1G > /sys/fs/cgroup/<父Cgroup名>/<子Cgroup名>/memory.max
    

Systemd管理环境的额外注意

如果你的系统由systemd主导管理Cgroup,手动创建的Cgroup可能仍会被systemd的清理逻辑影响。建议通过编写Systemd Slice单元文件来创建持久化Cgroup:

  1. 在/etc/systemd/system/下创建my-custom.slice文件:
    [Unit]
    Description=Custom Persistent Cgroup Slice
    
    [Slice]
    Deallocate=no  # 关键配置:无进程时不释放Cgroup
    MemoryMax=1G   # 可选:绑定资源限制增强持久化
    
  2. 重载Systemd并启动Slice:
    systemctl daemon-reload
    systemctl start my-custom.slice
    

内容的提问来源于stack exchange,提问作者user3082802

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:34:59