OpenClaw 内存占用过高
OpenClaw 的高内存占用几乎总是来自加载到内存中的 AI 模型,而非 OpenClaw 本身。网关进程仅使用适中的 200-400 MB。然而,一个全精度 F16 的 7B 参数模型需要 14 GB 以上——超过大多数家庭服务器的内存。以下策略可以在不明显降低质量的情况下将模型内存占用减少一半甚至更多,适用于从树莓派 5 到 Hetzner VPS 的各类设备。
🔍 先诊断
优化前先测量基准。在 Linux/macOS 上运行 'ps aux --sort=-%mem | head -20' 查看内存占用最高的进程。Docker 系统上使用 'docker stats' 查看每个容器的使用情况。Ollama 进程通常会在 RSS 内存中显示模型的完整权重。与下方表格对比,了解每种优化可以节省多少空间。
✅ 内存优化策略
量化将模型精度从 16 位浮点数降低到 4-8 位整数。对大多数任务来说,质量差异可以忽略不计。Q4_K_M 的 8B 模型约需 5 GB,而 F16 约需 14 GB——减少了近 3 倍。在尝试其他优化之前先从这里开始。
KV 缓存(用于存储对话历史的内存)随上下文长度和并发对话数量线性增长。将 context_length 从 4096 减半到 2048,对 7B 模型大约节省 2 GB。大多数对话实际使用的 token 远少于 4096。
默认情况下,Ollama 会无限期将加载的模型保留在内存中。设置 keep_alive: '5m' 告诉 Ollama 在 5 分钟不活跃后卸载模型,释放所有 GPU/内存,直到下一个请求到来。在 SSD 系统上,模型重新加载只需 2-4 秒。
添加 swap 让操作系统在内存不足时将模型权重溢出到磁盘。这比在内存中运行慢,但可以防止 OOM 杀死进程。对于运行 5 GB 模型的 4 GB 树莓派,通常在快速 SD 卡或 USB 驱动器上分配 4 GB swap 已足够。避免在机械硬盘上使用大量 swap——延迟会非常大。