mcpField
L
linux-cgroups

linux-cgroups

github.com/alphaonedev云与 DevOps48 次安装
代码仓库

关于 linux-cgroups

linux-cgroups 是用于 OpenClaw 多实例运行的资源管理技能,基于 Linux cgroups v2 限制内存和 CPU,并通过 OOM 保护及 systemd 切片管理进程。

主要功能

  1. 01设置内存上限
  2. 02配置 CPU 配额
  3. 03启用 OOM 保护
  4. 04使用 systemd 切片分组
  5. 05按 cgroup 启动进程

适用场景

  1. 01限制单个 OpenClaw 实例内存
  2. 02为多实例任务分配 CPU
  3. 03防止共享主机资源耗尽
  4. 04在生产环境隔离进程资源

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill linux-cgroups

安装后在 Claude Code 中输入/linux-cgroups确认已加载。

详细介绍

linux-cgroups

用途

此技能使用 Linux cgroups v2 对 OpenClaw 实例进行精确的资源管理,重点关注内存限制、CPU 配额、OOM(内存不足)保护和 systemd 切片,以防止资源耗尽,并优化多进程系统上的性能。

适用场景

在 Linux 服务器上运行多个 OpenClaw 实例,需要隔离资源、限制高需求任务或在生产环境中防止 OOM 终止时,使用此技能。在容器或虚拟化环境等共享主机场景中应用此技能,以确保 CPU 和内存分配公平。

主要功能

  • 设置内存限制,以限制每个 OpenClaw 实例的用量,例如通过 memory.max 防止交换。
  • 使用 cpu.max 实施 CPU 配额,控制带宽并限制 CPU 时间片。
  • 使用 memory.oom.group 启用 OOM 保护,调整进程优先级并避免突然终止。
  • 管理 systemd 切片,以便按层级对资源进行分组,从而支持复杂设置中的嵌套 cgroups。

使用模式

要应用 cgroups,请创建 cgroup 层级、设置限制并分配进程。始终以 root 身份或具有足够权限的用户运行。对于 OpenClaw,可在 cgroup 上下文中启动实例,以实施每个实例的限制。例如:为 OpenClaw 创建一个切片,然后将进程分配给该切片。使用 Bash 脚本实现自动化,并检查 /sys/fs/cgroup/ 下的 cgroup v2 路径。

常用命令/API

通过 CLI 工具或直接操作文件系统与 cgroups 交互。无需 API 密钥;使用系统级访问权限。

  • CLI 命令:
    • 创建 cgroup:sudo cgcreate -g memory,cpu:/openclaw_slice
    • 设置内存限制:sudo cgset -r memory.max=512M /openclaw_slice(限制为 512 MB)
    • 设置 CPU 配额:sudo cgset -r cpu.max=100000 50000 /openclaw_slice(限制为 1 个 CPU 核心,使用率为 50%)
    • 在 cgroup 中执行进程:sudo cgexec -g memory,cpu:/openclaw_slice openclaw --run task
  • 代码片段(使用 Bash 或 Python):
    # Bash example to set and apply memory limit
    sudo cgcreate -g memory:/openclaw
    sudo cgset -r memory.max=1G /openclaw
    sudo cgexec -g memory:/openclaw openclaw --instance id1
    
    # Python snippet using subprocess (requires root)
    import subprocess
    subprocess.run(['cgcreate', '-g', 'memory:/openclaw'])
    subprocess.run(['cgset', '-r', 'memory.max=1G', '/openclaw'])
    subprocess.run(['cgexec', '-g', 'memory:/openclaw', 'openclaw', '--instance', 'id1'])
    
  • 配置格式:直接编辑 cgroup 文件,例如将值写入 /sys/fs/cgroup/your_slice/memory.max。对于 systemd,在 /etc/systemd/system/ 下的 .slice 文件中定义切片,例如 [Slice]\nMemoryMax=512M。

集成说明

通过在 cgroup 执行环境中包装命令,将其与 OpenClaw 集成,例如修改启动脚本以包含 cgexec。确保主机使用 cgroups v2(通过 stat /sys/fs/cgroup/unified 检查);如果使用 v1,则通过 systemctl 迁移。对于多实例设置,使用 OPENCLAW_CGROUP_PATH=/openclaw_slice 等环境变量传递 cgroup 详情。使用 systemd-cgtop 或 cat /sys/fs/cgroup/your_slice/memory.current 监控用量。

错误处理

常见错误包括权限被拒(使用 sudo 修复)、cgroup 路径无效(使用 ls /sys/fs/cgroup/ 验证)或 OOM 事件(使用 dmesg | grep -i oom 检查日志)。处理方法:

  • 检查脚本中的返回码:if [ $? -ne 0 ]; then echo "Cgroup creation failed"; fi
  • 监控内存压力:使用 cat /sys/fs/cgroup/your_slice/memory.oom_control,并在触发 OOM 时发出警报。
  • 调试:对 systemd 切片运行 systemctl status your_slice;解析代码中的错误,例如:
    try:
        subprocess.run(['cgset', '-r', 'memory.max=1G', '/openclaw'], check=True)
    except subprocess.CalledProcessError as e:
        print(f"Error: {e.returncode} - {e.output}")
    

具体使用示例

  1. 限制单个 OpenClaw 实例的内存:创建 cgroup 切片,设置 2GB 内存上限,然后运行实例。命令序列:sudo cgcreate -g memory:/openclaw_inst1; sudo cgset -r memory.max=2G /openclaw_inst1; sudo cgexec -g memory:/openclaw_inst1 openclaw --instance inst1 --task process_data。这可以防止该实例超出 2GB,从而避免其他进程发生 OOM。
  2. 为多个实例应用 CPU 配额:为一组 OpenClaw 任务设置 CPU 限制。例如:sudo cgcreate -g cpu:/openclaw_group; sudo cgset -r cpu.max=200000 100000 /openclaw_group; sudo cgexec -g cpu:/openclaw_group openclaw --instance inst2 --task compute_loop。这会实施相当于 2 个 CPU 核心各使用 50% 的配额,确保各实例间性能均衡。

图关系

  • 相关:linux(集群),因为它基于 Linux 核心资源管理构建。
  • 通过标签关联:cgroups(直接)、memory(功能)、limits(特性)、performance(结果)。
  • 链接到其他技能:cpu-management(用于更深入的 CPU 控制)、oom-handler(用于高级 OOM 策略)。

评论

支持 Markdown