Appearance
Subagent sessions 内存无限累积,gateway RSS 增长 3GB+
问题
长时间运行 subagent 任务后,gateway 进程内存(RSS)持续增长,达到 3GB+ 甚至更高,最终导致 OOM 或系统卡顿。重启 gateway 可临时恢复,但 session 重新加载后内存再次攀升。
数据实证(社区实测):
- 10 小时 subagent 工作后:896 个 session 文件,281MB 磁盘
sessions.json索引文件:45MB- Gateway RSS:约 3.2GB(内存是磁盘的 ~3-5 倍,因 JSON 解析展开)
根本原因:
- 每次
sessions_spawn(mode="run")创建新 session 文件,但没有自动清理已完成的 session - Gateway 启动时全量加载所有历史 session 到内存(JSON 全解析,无懒加载)
sessions.json索引随 session 数量线性增长,本身也会消耗大量内存
解决方案
方案一:定期手动清理旧 session(立即有效)
bash
# 查看 session 文件数量和总大小
ls ~/.openclaw/sessions/ | wc -l
du -sh ~/.openclaw/sessions/
# 备份(重要!删除前先备份)
cp -r ~/.openclaw/sessions/ ~/.openclaw/sessions-backup-$(date +%Y%m%d)/
# 删除 7 天前的 session 文件(保留最近 7 天)
find ~/.openclaw/sessions/ -name "*.json" -mtime +7 -delete
# 重启 gateway 使变更生效(加载内存清空)
openclaw gateway restart方案二:控制 subagent 调用频率
减少并发 subagent 数量,让 session 文件不至于快速累积:
yaml
agents:
defaults:
subagents:
maxConcurrent: 3 # 限制并发,默认可能更高方案三:监控 gateway 内存
设置定期重启的 cron 任务(激进方案,适合长期无人值守运行):
bash
# 每 12 小时重启一次 gateway(在 openclaw cron 中配置)
openclaw cron add --schedule "0 */12 * * *" --command "gateway restart"官方已知此问题(#69628),正在规划 session 懒加载和自动 TTL 清理功能。
常见问题
Q: 删除 session 文件会丢失对话历史吗?
A: 会丢失已完成 subagent session 的历史记录。主 agent session 一般不在批量删除范围内(注意过滤)。如果 session ID 还在使用中,请勿删除对应文件。
Q: 如何判断 gateway 是否命中此内存问题?
A: 运行 ps aux | grep openclaw 观察 RSS 列。若超过 1GB 且在持续增长,同时 ~/.openclaw/sessions/ 下有大量文件,则是此问题。