openclaw docker部署内存飙升需三管齐下:一设cgroups硬限(memory: 1536m + memory_swap: 1536m);二关冗余服务(gui_renderer、scheduler、log_rotation);三启模型懒加载与lru缓存(loadpolicy: "demand"、modelcache.maxsizemb: 768、ttlminutes: 10),实测内存可从3.2gb压至1.7gb并持续回落。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw在Docker中部署后内存持续飙升至3GB以上,导致宿主机响应迟缓甚至触发OOM Killer强制终止进程,必须从容器配置、服务精简和运行时约束三方面同步干预。
设置硬性内存限制
不加限制的容器会无节制抢占宿主机内存,这是最直接的失控源头。必须在启动阶段就用cgroups划清边界。
编辑docker-compose.yml,在openclaw服务节点下添加资源限制块:
【memory: 1536m】 → 这是实测安全阈值,低于1GB会导致GLM-4.7-Flash加载失败,高于2GB则无法压制峰值;同时追加memory_swap: 1536m禁用交换分区,防止磁盘IO拖垮整机。
保存后执行docker-compose up -d --force-recreate重载服务。此时docker stats将显示MEM USAGE稳定在1.4–1.5GB区间,不再爬升。
精简容器内服务模块
OpenClaw默认启用图形渲染代理、多任务流调度器(MTS)和实时日志轮转,这三项在Docker纯API模式下完全冗余,关闭后可释放600MB+内存。
方法一:配置文件热禁用
进入容器执行docker exec -it openclaw bash,编辑/root/.openclaw/openclaw.json,将"gui_renderer"、"scheduler.enabled"、"log_rotation.enabled"全部设为false。
方法二:启动参数强制屏蔽
在docker-compose.yml的command字段末尾追加--disable-gui --disable-scheduler --disable-log-rotate,比配置文件更早生效,避免模块初始化阶段的内存预占。
执行docker-compose restart后,用top -p $(pgrep -f 'openclaw.*gateway')确认进程RSS下降明显。
启用模型懒加载与LRU缓存
第一步:修改模型加载策略
1. 打开/root/.openclaw/openclaw.json,定位到"glm-flash"节点
2. 添加"loadPolicy": "demand"和"maxConcurrent": 1,强制模型仅在首次请求时加载,且禁止并发加载多个实例
3. 在"performance"区块下新增缓存控制:"modelCache.maxSizeMB": 768、"ttlMinutes": 10
第二步:验证缓存淘汰机制
启动后连续发起5次不同问题的API调用,再执行curl http://localhost:8000/api/v1/cache/stats,返回的evicted_count应大于0,证明LRU已激活——若为0,说明配置未生效或路径错误。
第三步:重启网关服务
运行openclaw gateway restart使配置落地。此时内存占用将从3.2GB压至1.7GB左右,且随空闲时间延长持续回落。
清理残留卷与构建缓存
Docker镜像层和匿名卷会悄悄累积历史权重文件,特别是多次docker-compose build后未清理的中间层,单个可达800MB。
执行以下命令链清除所有无关数据:
docker system prune -a --volumes -f → 彻底删除未被任何容器引用的镜像、构建缓存和卷
若需保留基础镜像,改用精准清理:docker volume ls -q | grep -i 'openclaw\|claw\|agent' | xargs -r docker volume rm
最后检查/var/lib/docker/volumes/目录,确认无名称含openclaw_cache或glm_weights的残留卷存在。











