8G 内存 Mac Mini 极限:内存压缩与 Swap 优化本地常驻 OpenClaw(2026)
你买了入门款 Mac Mini——国行常见的 8G 或 16G 统一内存配置——希望 OpenClaw 作为家庭实验室网关 7×24 常驻,并偶尔跑本地端侧模型(ULM)。Linux VPS 教程让你改 swappiness;在 Apple Silicon 上,真正要盯的是内存压缩、APFS 交换文件,以及 GPU、CPU、神经网络引擎如何共享同一块物理内存。
本文面向 Apple 生态折腾者,不是机房管理员。你将把活动监视器当仪表盘,限制 OpenClaw Node 并发,并选择不会悄悄把机器拖进 swap 风暴的量化模型尺寸。
为何 8G Mac Mini 跑 OpenClaw 容易“顶满”
OpenClaw 不是单进程:包含 Node 网关、可选 MCP 子进程、浏览器自动化,有时还有 本地推理服务(MLX、Ollama、llama.cpp)。在统一内存架构下:
| 层级 | 典型 RSS(空闲→繁忙) | 说明 |
|---|---|---|
| macOS + WindowServer(无头仍有服务) | 2.5–4 GB | 登录 GUI 时更高 |
| OpenClaw 网关(Node) | 400 MB–1.2 GB | 会话历史越长越大 |
| 每个 MCP stdio 服务 | 各 50–300 MB | 文件系统 + GitHub 栈叠加快 |
| 本地 7B Q4 ULM(MLX/Ollama) | 4.5–6 GB | 8G 主机上的大头 |
| 浏览器工具会话 | 500 MB–2 GB | WebKit 是隐形开销 |
可引用定义:在 Apple Silicon 上,统一内存意味着加载模型权重的 GPU 与提供 HTTP 的 Node 网关共用同一块物理 RAM——不像许多 Linux GPU 机器那样有独立显存可“腾挪”。
因此 8G 机器在 top 里看似正常,一旦加载本地 ULM,压缩内存会上升、已用交换会跳动。调优前请先完成 Mac Mini 上的 OpenClaw 安装。
统一内存:M1 至 M4 预算表
| 芯片 / 内存档位 | OpenClaw + 仅云端 API | OpenClaw + 小型本地 ULM | 建议 |
|---|---|---|---|
| M1/M2 8G | ✓ 网关 + 1–2 个 MCP | ⚠ 仅 3B–4B 量化 | 以云 API 为主;ULM 仅做摘要 |
| M2/M3 16G | ✓ 较宽裕 | ✓ 单会话 7B Q4 | 家用服务器甜点配置 |
| M4 16G | ✓ + 轻度浏览器工具 | ✓ 7B Q4,避免 ULM 与浏览器并行 | 将 maxConcurrentTasks 设为 2 |
| M4 24G+ | ✓ 可区分预发/生产 | ✓ 7B–8B + 网关余量 | 见 本地 MLX 路由 |
外部参考:Apple Mac mini 技术规格(官方内存选项)。选购时请在 8G/16G 配置之间按是否常驻本地 7B 模型做取舍,不必为内存篇过度堆叠外设预算。
场景 A — 8G 家用网关(仅云模型)
OpenClaw 对接API 提供商,跳过本地 7B。在同时启用文件系统 + GitHub MCP 前,保留 ≥ 3 GB 可用内存。网关配置设 maxConcurrentTasks: 1,浏览器工具串行执行。
若 X 则 Y:空闲时压缩内存持续高于 2 GB,先关掉浏览器工具集,或升级内存/把 ULM 迁到其他机器。
场景 B — 16G + 本地 ULM 边车
只加载一个量化模型(如 7B Q4 ≈ 4.5 GB)。在 OpenClaw 未跑重度浏览器自动化时再调度 ULM。配合 并发上限——内存与 API 限流往往同时触顶。
活动监视器:五个关键列
打开活动监视器 → 内存:
- 内存压力 — 绿/黄/红;变黄就应减少 MCP
- App 内存 — 关注 Node/OpenClaw 行在长会话后的跳变
- 已压缩 — 系统压缩非活跃页;持续攀升表示 RAM 不足
- 已使用的交换 — APFS 交换;8G 主机 > 2 GB 需处理
- 缓存文件 — 可回收,勿与 Apple 统计里的“空闲”混淆
SSH 无头环境可用 CLI:
memory_pressure
vm_stat | egrep 'Pages (free|active|inactive|speculative|wired|compressed|swap)'
sysctl hw.memsize
浸泡测试时每 5 分钟记录快照,并与 OpenClaw JSONL 时间戳对照。
Swap 与内存压缩(macOS,非 Linux)
macOS 通过 APFS 上的动态交换文件自动管理 swap。一般不要试图关闭压缩——那是 Apple 撑满 8G 的手段。应:
- 降低需求 — 更小量化、更少 MCP、更短上下文
- 错开负载 — 避免在 OpenClaw 定时高峰预热 ULM
- 观察 swapins —
vm_stat中Pageins/Swapins加速即可能在抖动
若需 launchd 级护栏(ulimit、plist),请参阅 资源限制指南——本文讲硬件预算,该文讲进程上限。
OpenClaw 配置:限制 Node 与 MCP 扩散
网关片段示例(YAML/JSON 因版本而异,请对照 openclaw.json):
gateway:
maxConcurrentTasks: 1 # 8 GB: start at 1; 16 GB: 2
taskTimeoutMs: 120000
agents:
maxParallelToolCalls: 2 # lower on 8 GB
mcp:
maxServers: 2 # filesystem + one optional
Node 堆上限(LaunchAgent EnvironmentVariables):
<key>EnvironmentVariables</key>
<dict>
<key>NODE_OPTIONS</key>
<string>--max-old-space-size=1024</string>
</dict>
16G 常用 --max-old-space-size=2048;8G 建议 1024 或更低,为 MCP + ULM 留余量。
七步运行手册:低内存 Mac Mini 稳定运行 OpenClaw
步骤 1 — 空闲基线快照
重启后、启动 OpenClaw 前:
vm_stat | head -12
记录 Pages free 与 Compressed。
步骤 2 — 仅启动网关,确认压力为绿
openclaw gateway start # or launchctl kickstart your plist label
等待 10 分钟;16G 且仅云 API 时,内存压力应保持绿色。
步骤 3 — 逐个添加 MCP
先启用文件系统 MCP,观察约 +200–400 MB;仅在压力允许时再加 GitHub MCP。
步骤 4 — 加载 ULM 前设定并发
应用 maxConcurrentTasks: 1(8G)或 2(16G)。用双任务队列验证:第二任务应等待,而非再 fork 浏览器。
步骤 5 — 在低峰预热本地 ULM
# Example: Ollama pull + run small model
ollama pull qwen2.5:3b-instruct-q4_K_M
ollama run qwen2.5:3b-instruct-q4_K_M "Reply OK"
8G 上若 60 秒内交换使用跳升 > 1 GB,请降级量化或将 ULM 迁出本机。
步骤 6 — 定期记录内存
用 Cron 或 LaunchAgent 执行:
/usr/bin/logger -t openclaw-mem "$(memory_pressure 2>&1 | head -1)"
步骤 7 — 记录回滚阈值
若压缩 > 3 GB(8G 主机)或 swap > 2 GB:卸载 ULM,设 maxConcurrentTasks: 1,重启网关。
故障排查
现象:OpenClaw“卡住”但 CPU 很低
模式:内存压力红色、swap 攀升、风扇安静。
处理:结束浏览器 MCP 会话;重启网关;降低 maxParallelToolCalls;检查孤儿 Node(pgrep -fl openclaw)。
现象:本地 ULM 先快后慢约 10 倍
模式:vm_stat 中 Compressor 页持续增加。
处理:暂停浏览器工具;卸载模型;8G 上峰值时段只跑 ULM或 OpenClaw 其一。
现象:网关日志 JavaScript heap out of memory
模式:长对话 + 超大工具输出。
处理:先收紧工具输出上限再动 NODE_OPTIONS;截断 JSONL 会话;plist 环境变量见资源限制一文。
按内存档位的推荐路径
| 你的内存 | 建议做法 |
|---|---|
| 8 GB | 以云 API 为主;maxConcurrentTasks: 1;最多 2 个 MCP;仅低峰跑 3B–4B ULM |
| 16 GB | 7B Q4 ULM + OpenClaw,并发 2;每周看活动监视器 |
| 24 GB+ | 混合 MLX 路由;仍限制浏览器;持续观察 swap |