OpenClaw 内存优化指南:从源码出发,在 2GB VPS 上也能跑

1. 问题背景

OpenClaw 是一个功能丰富的 AI Agent 框架,但功能丰富意味着默认配置下什么都开着。在 2-4GB 内存的小 VPS 上跑 OpenClaw,经常遇到 OOM(内存不足)导致进程被杀。

本文通过阅读 OpenClaw 最新源码(7814 个 TypeScript 文件),系统梳理了所有可关闭的功能开关和内存优化手段。

2. OpenClaw 内存占用分析

2.1 典型内存分布(4GB VPS 实测)

进程RSS 内存说明
openclaw-gateway500-900MB主进程,功能越多越大
Chrome(主进程)~80MB浏览器自动化
Chrome(渲染进程)~186MB每个标签页一个
Chrome(网络进程)~42MB
Chrome(其他)~40MBGPU、crashpad 等
**Chrome 合计****~350MB**不用浏览器就是纯浪费
Docker daemon~60MB如果跑了 sandbox
**总计****900-1300MB**单个 gateway 实例

2.2 常见陷阱:多个 Gateway 同时运行

一个实际案例中发现 3 个 gateway 进程同时运行


jay 用户的 gateway    → 911MB
root 用户的 gateway #1 → 642MB  
root 用户的 gateway #2 → 536MB
合计                   → 2.1GB(占 4GB 机器的 55%)

这通常是因为:

诊断命令:


ps aux | grep openclaw-gateway | grep -v grep

只保留一个:


# 先停掉所有
sudo systemctl stop openclaw-gateway 2>/dev/null
pkill -f openclaw-gateway

# 只启动一个
openclaw gateway start

3. 可关闭的功能开关(源码级梳理)

以下所有配置项均在 ~/.openclaw/openclaw.yaml(或 openclaw.json)中设置。

3.1 Browser(浏览器自动化)— 省 ~350MB 🔥🔥🔥

这是单项收益最大的优化。

OpenClaw 内置了完整的无头 Chrome 浏览器,通过 Playwright + CDP 控制。默认开启后,Chrome 常驻内存。


browser:
  enabled: false

关闭后影响:

什么时候需要开:

折中方案: 平时关闭,需要时在 openclaw.yaml 里临时开启并重启 gateway。

Browser 架构简介


Agent
  │
  ▼
browser 工具(7 种 action)
  │
  ▼ HTTP
Browser Control Server
  │
  ▼ CDP (Chrome DevTools Protocol)
Headless Chrome
  ├── 主进程 (~80MB)
  ├── 渲染进程 (~186MB/标签)
  ├── 网络进程 (~42MB)
  └── GPU/其他 (~40MB)

两种 Profile:

核心技巧:snapshot 返回 accessibility tree(纯文本),比 screenshot(图片+视觉模型)便宜 10 倍以上

3.2 Canvas Host — 省 ~20-50MB

Canvas 是 OpenClaw 的实时 UI 渲染功能,用于在对话中展示交互式内容。


canvasHost:
  enabled: false

关闭后影响: canvas 工具不可用,无法在对话中渲染交互式 UI。

3.3 ACP(Agent Communication Protocol)— 省 ~30-80MB

ACP 是 sub-agent 编排系统,允许 spawn 独立的子 agent 会话。


acp:
  enabled: false

关闭后影响:

注意: 如果你用了 Codex CLI、Claude Code 等通过 ACP 接入的工具,不能关。

3.4 Memory Search(语义记忆搜索)— 省 ~50-100MB

OpenClaw 可以对 memory 文件建立向量索引,实现语义搜索。


agents:
  defaults:
    memorySearch:
      enabled: false

关闭后影响:

3.5 Web Channel(WebChat)— 省 ~10-20MB

内置的网页聊天界面。


web:
  enabled: false

关闭后影响: 无法通过浏览器访问 WebChat。如果只用 Telegram/Discord/微信等渠道,不需要。

3.6 Control UI(管理界面)— 省 ~10-20MB

Gateway 的 Web 管理界面。


gateway:
  controlUi:
    enabled: false

关闭后影响: 无法通过浏览器访问 Dashboard。CLI 管理不受影响。

3.7 OpenTelemetry(遥测)— 省 ~10-30MB


diagnostics:
  enabled: false
  otel:
    enabled: false

关闭后影响: 无 traces/metrics/logs 导出。除非你接了 Grafana/Jaeger 等监控系统,否则这些数据也没人看。

3.8 Wide-area Discovery(广域发现)— 省 ~5-10MB

mDNS 广域发现,用于跨网络发现其他 OpenClaw 实例。


discovery:
  wideArea:
    enabled: false

关闭后影响: 无法跨网络发现其他 gateway。本地 mDNS 发现不受影响。

3.9 Link Understanding(链接预处理)— 省处理开销

不是常驻内存,但会在每条消息中自动抓取和摘要 URL。


tools:
  links:
    enabled: false

关闭后影响: 消息中的 URL 不再自动预处理。Agent 仍可手动用 web_fetch 抓取。

3.10 Compaction Memory Flush(压缩前记忆刷盘)


agents:
  defaults:
    compaction:
      memoryFlush:
        enabled: false

关闭后影响: 上下文压缩前不再自动触发记忆保存。如果你的 agent 不依赖自动记忆,可以关。

4. 系统级优化

4.1 添加 Swap(必做)🔥🔥🔥

小内存机器必须有 swap,否则内存用尽直接 OOM kill。


# 创建 2GB swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 调整 swappiness(小内存建议 60-80)
sudo sysctl vm.swappiness=60
echo 'vm.swappiness=60' | sudo tee -a /etc/sysctl.conf

4.2 限制 Node.js 堆内存

OpenClaw 基于 Node.js,默认堆内存上限是物理内存的 ~70%。可以显式限制:


# 在启动命令前设置
export NODE_OPTIONS="--max-old-space-size=512"
openclaw gateway start

建议值:

4.3 减少 Cron 任务

每个 cron 任务触发时都会创建一个 agent 会话,消耗内存。


# 查看当前 cron 任务数量
openclaw cron list | wc -l

精简不必要的 cron,合并频率相近的任务。

4.4 使用更小的模型

大模型的上下文窗口意味着更大的 token 缓存。如果内存紧张:

5. 推荐配置模板

5.1 极限省内存(2GB VPS)


browser:
  enabled: false
canvasHost:
  enabled: false
acp:
  enabled: false
web:
  enabled: false
gateway:
  controlUi:
    enabled: false
diagnostics:
  enabled: false
discovery:
  wideArea:
    enabled: false
tools:
  links:
    enabled: false
agents:
  defaults:
    memorySearch:
      enabled: false
    compaction:
      memoryFlush:
        enabled: false

预期效果: Gateway 内存从 ~900MB 降到 ~300-400MB。

5.2 平衡配置(4GB VPS)


browser:
  enabled: false          # 需要时临时开
canvasHost:
  enabled: false
diagnostics:
  enabled: false
discovery:
  wideArea:
    enabled: false
web:
  enabled: false          # 只用 Telegram/Discord

预期效果: Gateway 内存 ~500-600MB,保留 ACP 和 Memory Search。

5.3 全功能(8GB+ VPS)

保持默认即可,所有功能都开。建议只关 diagnosticsdiscovery.wideArea

6. 优化效果汇总

优化项预估节省风险推荐度
杀多余 gateway 进程500-1200MB⭐⭐⭐⭐⭐
添加 Swap防 OOM⭐⭐⭐⭐⭐
browser.enabled: false~350MB无法浏览器自动化⭐⭐⭐⭐⭐
canvasHost.enabled: false~20-50MB无 Canvas UI⭐⭐⭐⭐
acp.enabled: false~30-80MB无 sub-agent⭐⭐⭐
memorySearch.enabled: false~50-100MB无语义记忆搜索⭐⭐⭐
diagnostics.enabled: false~10-30MB无遥测⭐⭐⭐⭐
web.enabled: false~10-20MB无 WebChat⭐⭐⭐⭐
controlUi.enabled: false~10-20MB无 Dashboard⭐⭐⭐
NODE_OPTIONS 限制堆防止膨胀可能影响大上下文⭐⭐⭐

理论最大节省: 从默认 ~1.3GB 降到 ~300MB(不含系统开销)。

7. 诊断命令速查


# 查看总内存使用
free -h

# 按内存排序看进程
ps aux --sort=-%mem | head -15

# 查看 OpenClaw gateway 详细内存
cat /proc/$(pgrep -f openclaw-gateway | head -1)/status | grep -i "vmrss\|vmsize\|threads"

# 查看是否有多个 gateway
pgrep -fa openclaw-gateway

# 查看 Chrome 进程
pgrep -fa chrome | grep -c ""

# 查看 swap 使用
swapon --show

# 查看 Node.js 堆使用(运行时)
node -e "console.log(process.memoryUsage())"

8. 总结

OpenClaw 默认是"全家桶"模式——浏览器、Canvas、ACP、Memory Search、遥测、WebChat 全开。这在 8GB+ 的机器上没问题,但在小 VPS 上会把内存吃光。

核心原则:

1. 先杀多余进程 — 确保只有一个 gateway 在跑

2. 加 Swap — 小内存机器的安全网

3. 关掉不用的功能 — browser 是最大的优化点

4. 按需开启 — 需要浏览器时临时开,用完关掉

OpenClaw 的模块化设计让这些优化成为可能——每个功能都有独立的开关,不是全有或全无。

基于 OpenClaw 源码分析(2026-03-26 最新版本,7814 个 TypeScript 文件)

源码:github.com/openclaw/openclaw