关于 linux-cgroups
linux-cgroups 是用于 OpenClaw 多实例运行的资源管理技能,基于 Linux cgroups v2 限制内存和 CPU,并通过 OOM 保护及 systemd 切片管理进程。
主要功能
- 01设置内存上限
- 02配置 CPU 配额
- 03启用 OOM 保护
- 04使用 systemd 切片分组
- 05按 cgroup 启动进程
适用场景
- 01限制单个 OpenClaw 实例内存
- 02为多实例任务分配 CPU
- 03防止共享主机资源耗尽
- 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
- 创建 cgroup:
- 代码片段(使用 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}")
具体使用示例
- 限制单个 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。 - 为多个实例应用 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 策略)。