从3月8日之后的版本很难使用OpenClaw,会提示错误:
openclaw update
<— Last few GCs —>
[971442:0x893b000] 40625 ms: Mark-Compact 835.5 (840.9) -> 834.9 (846.4) MB, pooled: 0 MB, 2916.70 / 0.00 ms (average mu = 0.291, current mu = 0.046) allocation failure; scavenge might not succeed
[971442:0x893b000] 43680 ms: Mark-Compact (reduce) 839.0 (846.4) -> 838.5 (842.7) MB, pooled: 0 MB, 2186.22 / 0.00 ms (+ 313.2 ms in 0 steps since start of marking, biggest step 0.0 ms, walltime since start of marking 2599 ms) (average mu = 0.239, cur<— JS stacktrace —>
FATAL ERROR: Reached heap limit Allocation failed – JavaScript heap out of memory
—– Native stack trace —–1: 0xe98a91 node::OOMErrorHandler(char const*, v8::OOMDetails const&) [openclaw]
2: 0x12a7710 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [openclaw]
3: 0x12a7aac v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [openclaw]
4: 0x150a9e5 [openclaw]
5: 0x151de12 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [openclaw]
6: 0x14f6912 v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [openclaw]
7: 0x14f6c48 v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [openclaw]
8: 0x14cded0 v8::internal::Factory::NewFillerObject(int, v8::internal::AllocationAlignment, v8::internal::AllocationType, v8::internal::AllocationOrigin) [openclaw]
9: 0x194fefb v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [openclaw]
10: 0x20b8276 [openclaw]
对于 2核2GB 的云主机来说,Node.js 默认的内存分配策略非常容易触碰上限。由于系统本身(Linux 内核、SSH 服务等)会占用约 300MB-500MB 的内存,留给 Node.js 的物理内存其实非常有限。
当 openclaw update 执行构建或编译任务时,内存占用会瞬间飙升,导致系统为了保护自己而强制结束进程。
1. 临时增加 Swap 分区(最推荐)
在 2G 内存的机器上跑 Node.js 更新,Swap(虚拟内存)是刚需。它能把硬盘当内存用,防止进程因 OOM (Out of Memory) 直接崩溃。
执行以下命令创建一个 2GB 的交换文件:
# 创建 2G 的 swap 文件
sudo fallocate -l 2G /swapfile
# 设置权限
sudo chmod 600 /swapfile
# 格式化为 swap 格式
sudo mkswap /swapfile
# 启用 swap
sudo swapon /swapfile
# 确认是否生效 (看到 Swap 那行有数值即可)
free -h
2. 限制 Node.js 内存上限
即便有了 Swap,也建议给 Node.js 一个明确的限制,建议设置为 1536MB(1.5G),预留 512MB 给系统内核:
openclaw update
3. 停止其他占用内存的服务
在更新期间,建议暂时关闭不必要的进程(如数据库或其他占用内存的 Docker 容器),等更新完再开启:
ps aux –sort=-%mem | head -n 4
总结建议
2G 内存的配置,执行方案 1是比较合理的解决方案。如果不开启 Swap,即便你设置了 max-old-space-size,由于物理内存确实不足,更新过程中极大概率会导致整个系统甚至 SSH 连接直接卡死。
更新完成后,如果不想一直占用硬盘空间,可以用 sudo swapoff /swapfile 关闭它

