AI 自动化 运行手册

2026 无头 Mac mini M4 上的 OpenClaw 网关 SRE:日志轮转、内存水位与优雅重启窗口

ZV
ZoneVM 技术团队
2026-04-16 约 21 分钟

当 OpenClaw 网关从周末实验升级为生产依赖,而底层是一台租用的无头 Mac mini M4 时,失败模式会悄悄从「安装没跑完」切换成「内存缓慢爬升、日志吃满磁盘,而周二发布窗口恰好撞上 launchd 重启风暴」。 这份 SRE 风格指南把网关当作有状态服务:三列表控制面、八条带负责人的维护步骤、三条面向日志字节与 RSS 的数值锚点,以及指向 退出码与日志排查launchd 崩溃循环诊断升级后分阶段冒烟 的 FAQ。需要分拆多区域网关时,请同时打开 帮助定价 对齐合同与运行手册。

ZoneVM 的租用画像刻意保持「无聊的硬件算术」:Apple Silicon M4、十核 CPU、16GB 统一内存、在香港、日本、韩国、美国大致 1Gbps 的公网。无聊是好事——SRE 预算喜欢可预测的上限——直到 JSON 行日志忘记轮转,统一内存压力让内核从你最关心的进程回收页面。

本文默认每台 Mac 只有一个生产级网关,除非你已显式做了 CPU 与 IO 隔离。把两个生产网关硬塞在同一台 16GB 主机却缺少类 cgroup 的纪律,是「周二随机故障」的高频来源;请拆分主机而不是拆分人格。最后,与安全对齐词汇:把计划内重启称作「排空窗口」而非「重启派对」,审计才能看到工单里的优雅关机证据;需要偶发 GUI 确认时,把清单与 VNC 指南放在同一目录,胜过凌晨三点的个人英雄主义。

在变更管理角度,网关日志往往比应用日志更吵:一次模型重试可能在秒级打印上千行结构化事件。若不把「热日志预算」写进月度评审,磁盘曲线会在财务注意到之前先教训值周同事。把日志目录纳入与 CPU 曲线同级的看板,而不是事后附件,能显著降低「以为网关死了其实是磁盘满」的误报。

四种漂移信号:说明值班即将讨厌网关

  • 流量平稳但 RSS 爬升:若常驻集每天增长超过约 200MB,优先怀疑泄漏或无界缓存——在二分前先早轮转。
  • 磁盘用量按小时台阶跳:与日志轮转错配对齐的小时尖峰,多半是压缩从未执行,而非真实用户增长。
  • 热软限与温控:紧凑型 Mac mini 长时间 ninety°C 级封装温度,常与伪装成网络超时的看门狗杀进程相关。
  • LaunchThrottleInterval 被忽略:若改 plist 从不生效,多半是域或 UID 编辑错误——先核对所有权再调间隔。

四条信号应进入月度健康检查的同一表单:任何一条连续两周黄色,就触发与产品共同的容量对话,而不是等到红色才解释「为什么上周还能跑」。把「台阶磁盘」与具体文件名关联起来,能避免团队把 IO 问题误判为模型质量。

控制表:旋钮、如何观察、16GB M4 上的安全起点

控制旋钮 观察路径 安全起点
JSON 日志按大小轮转 每日 cron 导出 JSON 并运行 du -sh ~/Logs/openclaw 单文件约 250MB 轮转,保留八代未压缩随后 gzip
网关 RSS 高水位 每五分钟采样 ps -o rss= -p $(pgrep -f openclaw-gateway) 空闲流量下 RSS 连续三十分钟超过约 1.2GB 则告警
周级优雅重启窗口 日历 + CI 冻结看板 本地 Mac 时间周日 06:00,排空不超过五分钟;若两条冒烟先失败则中止
LaunchAgent 上的 ThrottleInterval 对任务 label 运行 launchctl print 崩溃间隔从约十秒起步;根因关闭前勿盲目收紧
并发 adapter worker 网关指标或粗粒度日志计数 16GB 主机默认上限四路,除非剖析证明仍有裕量

控制表应与版本号冻结:每当网关小版本升级,先复制上一季度的旋钮值,再在 分阶段冒烟 文章定义的子集上验证,而不是直接套用上游默认值。默认值往往假设 32GB 或独占 GPU——在 16GB 无头机上那是灾难的捷径。

三条数值锚点:写给变更评审幻灯片

  • 为日志与崩溃转储预留约 5GB:在单租户 CI Mac 上为网关日志与 panic 产物独占约 5GB APFS 空间,避免坏一周驱逐 git packfile。
  • 九十秒排空超时:优雅关机应给在途 HTTP 请求约九十秒完成;更短会在浏览器侧制造假 502。
  • 零意外重叠重启:若亚太与北美业务高峰重叠少于四小时,不要在该菱形窗口安排维护,除非两个半球都书面确认。

锚点二应与反向代理 idle 超时一起读:若边缘在六十秒切断「安静」连接,而你的排空预算九十秒,用户会看到间歇性断流。把三条锚点写进与 launchd 崩溃循环 同一目录的 runbook,值周在压力下才不会凭记忆改数字。

锚点三本质是组织信号:当日历无法提供四小时重叠,说明 follow-the-sun 并未真正落地,此时「周日凌晨」只是对某一侧团队的残忍。把维护窗口改成「对两半球都可接受的 UTC 切片」,并在工单附上时区表,能减少一半无谓的情绪对抗。

八步维护梯(每月最低频)

  1. 快照 plist 校验和:任意编辑前把活跃 LaunchAgents 的 SHA-256 存进 git。
  2. 验证类 logrotate 行为:用合成burst日志确认新文件确实出现。
  3. 修剪统一日志导出:归档到对象存储;热区保留十四天,遵循既有排障文章。
  4. 对网关 PID 做每周 lsof 计数趋势。
  5. 任意 plist 变更后跑 升级后冒烟 子集。
  6. 若单日重启计数两次递增,重跑 崩溃循环清单
  7. 把当月差异写回链到 帮助 的值班手册。
  8. 即便安静月份也写一段回顾,让财务看到主动 SRE,而不是沉默。

FAQ:无聊但能阻止英雄式接警的答案

  • 是否应关闭 macOS swap 来「逼」泄漏现身? 否——统一内存已会暴露压力;关 swap 只会放大内核抖动。
  • 夜间 kill -9 可接受吗? 仅作最后手段断路器;优先带排空的 SIGTERM。
  • 是否应每周快照整盘? 更推荐 targeted plist 与配置 tarball;整盘快照会吃掉构建需要的 IO。
  • 法务要求九十天热日志? 送到合规对象存储;不要在 16GB 机上保留九十天未压缩热日志。

若 FAQ 第一条仍被反复讨论,通常说明团队尚未建立「泄漏分级」语言:把「可接受缓慢泄漏」与「必须当周修复」的边界写进 on-call 手册,比争论 swap 开关更有用。第四条与对象存储成本相关——提前与采购对齐 egress 单价,避免季度末突然被告知「日志比 GPU 更贵」。

何时该拆两台 Mac 而不是继续硬调

若周五常规压测下 RSS 高水位与日志预算无法同时为绿,先在同一都市圈加第二台 Mac mini M4 做只读影子流量——在承诺单机无限日志保留之前,用 定价 页面对比附加成本。

拆分时要明确「读写网关」与「只读影子」的密钥边界,否则你会复制 429 而不是复制稳定性。把拆分决策链接到 控制台 里的主机标签,避免半年后无人记得哪台负责影子。

为何 Mac mini M4 租用贴合这篇 SRE 叙事

Apple Silicon M4 的十核布局与 16GB 统一内存为「网关 + 中等日志 + 轻量索引」留出裕量,而不必持续与让指标撒谎的热极限搏斗。原生 macOS 意味着 launchd、统一日志与公证工具链与笔记本一致,缩小「staging 里一切正常」的虚构。香港、日本、韩国、美国约 1Gbps 的可用带宽让远程日志回传与制品上传落在可预测的信封内。通过 ZoneVM 定价 租用独占主机,可把抽象的 SRE 旋钮——轮转大小、重启窗口、adapter 上限——变成可开票、可复制蓝绿、可在季度实验后退役的容量。

当管理层追问「为何还要物理机」时,回答应指向可验证的 SLO:磁盘余量、RSS 曲线、重启风暴计数——而不是指向品牌。把本页链接与 Grafana 面板放在同一收藏夹,下一次预算辩护会短很多。

最后,把网关视作服务意味着 on-call 轮值表与 CI 冻结板对齐:没有日历纪律的自动化只是脚本;有日历纪律的自动化才是运行手册。愿你的日志永远轮转,重启永远在窗口内。

把网关当服务,而不是副业项目

无头 Mac mini M4 · 16GB · 香港 / 日本 / 韩国 / 美国 — 自动化要与轮转和重启策略配对。

稳定的 OpenClaw 主机

日志 · 重启

帮助