跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

内存预算与回放窗口

理解 ACP heap 模式、自适应 journal 容量和仅观察的内存压力状态。

Daemon 的 memory budget 用于分配策略,不是整个进程树的硬 RSS 限额。ACP、MCP 子进程和操作系统内存需要结合实际指标观察。

总预算和压力

--memory-budget-mb 默认取 cgroup 限制或主机内存的 50%,有效值不超过可用内存;显式值必须为 1024–1048576 的整数 MB。低内存主机会报告 insufficientMemory,不会把估算强行抬高到最低值。低于约 2 GB 的主机可能因默认 50% 比例触发该状态;显式 1024 也仍需至少这么多可用内存。

--memory-pressure-mode 默认 observe,异常压力会在 daemon/status 的 runtime.memory.pressure 和 daemon_memory_pressure issue 中反映。off 仍报告数值和等级,只不产生 issue;两者都不自动缓解内存压力。

压力等级取 daemon 根进程 RSS/可用内存与 V8 heap used/heap ceiling 两个比率中较差者,不覆盖全部子进程。子进程应另外检查 runtime.memory.children.rssBytes。

ACP 子进程 heap 模式

--child-heap-mode行为
off关闭分区模型
observe默认,只报告 childHeap,不改变创建策略
admit按模型限制并行 child 数量
enforce实验性:除准入外,还给托管 ACP child 设置固定 old-space 上限

admit/enforce 可先回收一个符合条件的 idle ACP,再以 acp_child_capacity_exhausted 拒绝新创建;有 live session 的 child 受保护。注册工作区不等于立即占据 child 名额。零 slot 配置会使启动失败。

enforce 会规范化继承的固定 Node heap flags,百分比 heap 参数冲突则拒绝。old-space 上限不限制 RSS 或 MCP 后代进程,拒绝计数为零也不证明没有内存风险。预算或模式变化需重启;回退到 admit 只保留准入,不施加 heap ceiling。

三种历史窗口

窗口默认限制含义
SSE replay ring8000 事件Last-Event-ID 重连
compactedReplay4194304 字节live load 快照保留的既有回放
liveJournal10000 条 replay entry、8388608 字节当前未完成轮次的回放

--compacted-replay-max-bytes 接受正安全整数,上限 256 MiB,超限舍弃较旧事件并加入 history_truncated,不限制磁盘 transcript。

liveJournal 中连续兼容文本/思考 chunk 可合并成一条 entry,每条最多含 256 个源事件;字节仍按序列化源事件计算,截断标记中的 retainedEvents、truncatedEvents 也统计源事件。

journal 自适应增长

未显式固定 --max-journal-events 或 --max-journal-bytes 时,超出基线可按需提高单会话限制,朝加倍增长,单会话硬上限 256 MiB。所有 workspace bridge 共享有效内存预算 5% 的增长池,整个池最多 1024 MB;insufficientMemory 时池为 0,禁止自适应增长。

显式设置任一 journal 参数即关闭自适应。没有余量或分配不足时,按完整 entry 丢弃最旧内容并加入 history_truncated,至少保留一条,所以最终保留尾部可能远小于字节上限。

这些窗口只影响实时恢复视图,完整历史应使用transcript 分页。从状态看 configured 与 effective 预算、live child 数量和实际 RSS,不能把扩大回放参数当作无需成本的持久化方案。