防止OpenClaw dreaming文件无限积累导致OOM崩溃的智能保护系统
dreamingcontext overflowOOMcrash recoverymemory protectiondreaming guard健康报告Dreaming Guard Pro 是一个智能保护系统,用于:
bash
cd ~/.openclaw/skills
mkdir dreaming-guard
cp -r /root/.openclaw/workspace/projects/dreaming-guard-pro/* dreaming-guard/
bash
cd projects/dreaming-guard-pro
npm install # 无需外部依赖,纯Node.js实现
在对话中使用触发词即可激活:
text
用户: 检查dreaming状态
助手: [调用Dreaming Guard Pro生成健康报告]
javascript
const Guard = require('dreaming-guard-pro/src/guard');
// 创建并启动守护进程
const guard = new Guard({
loopInterval: 30000, // 30秒检查一次
reportInterval: 3600000, // 1小时生成报告
enableProtector: true, // 启用进程保护
enableHealer: true // 启用崩溃自愈
});
await guard.start();
// 获取当前状态
const status = guard.getStatus();
// 手动触发动作
await guard.triggerArchive();
await guard.triggerCompress('lossy');
// 生成健康报告
const report = guard.getHealthReport('markdown');
// 停止守护
await guard.stop();
javascript
// 只使用监控器
const Monitor = require('dreaming-guard-pro/src/monitor');
const monitor = new Monitor({ interval: 30000 });
await monitor.start();
// 只使用压缩器
const Compressor = require('dreaming-guard-pro/src/compressor');
const compressor = new Compressor();
await compressor.compress('/path/to/dreams', 'lossy');
// 只使用归档器
const Archiver = require('dreaming-guard-pro/src/archiver');
const archiver = new Archiver();
await archiver.archive({ sourcePath: '/path/to/dreams' });
选项默认值说明loopInterval30000主循环间隔(毫秒)reportInterval3600000报告生成间隔(毫秒)enableProtectortrue启用进程保护enableHealertrue启用崩溃自愈enableReportertrue启用报告生成watchPath~/.openclaw/workspace/memory/.dreams监控路径logLevel'info'日志级别
选项默认值说明thresholds.green524288000安全阈值(500MB)thresholds.yellow1073741824警告阈值(1GB)thresholds.red2147483648危险阈值(2GB)growthRate.low10低增长率阈值(KB/min)growthRate.medium100中增长率阈值(KB/min)growthRate.high500高增长率阈值(KB/min)
选项默认值说明maxMemoryMB512最大内存限制(MB)thresholds.warning0.70预警阈值(70%)thresholds.critical0.85严重阈值(85%)thresholds.emergency0.95紧急阈值(95%)cooldown60000干预冷却时间(毫秒)
策略减少目标说明lossless15%无损压缩,去除重复lossy40%有损压缩,摘要合并aggressive70%激进压缩,只保留关键
层级保留时间说明hot7天内最近数据,快速访问warm7-30天中期数据,压缩存储cold30天以上历史数据,深度压缩
支持三种格式:
text - 纯文本,适合终端查看json - JSON格式,适合程序解析markdown - Markdown格式,适合文档展示示例报告(text格式):
text
==================================================
Dreaming Guard Pro - Health Report
Generated: 2026-04-19T12:00:00.000Z
==================================================
[Overall Status]
Status: HEALTHY
Health Score: 95/100
Risk Level: green
[Current State]
Total Size: 128MB
Total Files: 42
Growth Rate: 5 KB/min
[Memory Usage]
Process RSS: 64MB
Process Heap: 32/48MB
System: 2048/8192MB (25%)
[Recommendations]
- Continue monitoring - system is healthy
- No immediate action required
主循环每30秒执行一次:
text
Monitor → Analyzer → Decision → Execute
↓ ↓ ↓ ↓
采集数据 分析趋势 决策动作 执行动作
动作类型:
no_action - 无需操作notify - 发送通知archive - 触发归档compress - 触发压缩emergency - 紧急处理(压缩+归档)文件默认路径配置文件~/.openclaw/dreaming-guard.json状态文件~/.openclaw/dreaming-guard-state.json日志文件~/.openclaw/logs/dreaming-guard.log归档目录~/.openclaw/archive/dreaming/健康报告~/.openclaw/logs/health-report-*.log
可通过环境变量覆盖配置:
bash
DREAMING_GUARD_MONITOR_INTERVAL=30000
DREAMING_GUARD_MEMORY_THRESHOLD=512
DREAMING_GUARD_ARCHIVE_PATH=~/.openclaw/archive
DREAMING_GUARD_THRESHOLD_WARNING=524288
DREAMING_GUARD_THRESHOLD_CRITICAL=1048576
DREAMING_GUARD_THRESHOLD_EMERGENCY=2097152
bash
cd projects/dreaming-guard-pro
npm test
或单独测试Phase 5:
bash
node test/test-phase5.js
javascript
guard.start() // 启动守护
guard.stop() // 停止守护
guard.getStatus() // 获取状态
guard.runOnce() // 执行一次循环
guard.getHealthReport() // 生成报告
guard.triggerAction() // 手动触发动作
guard.triggerArchive() // 手动归档
guard.triggerCompress() // 手动压缩
guard.healthCheck() // 健康检查
javascript
reporter.generate(format) // 生成报告
reporter.getSummary() // 获取摘要
reporter.formatReport(data, f) // 格式化数据
reporter.saveReport(report) // 保存报告
MIT
开发者: OpenClaw Community
版本: 1.0.0
最后更新: 2026-04-19