Skip to content
FunCoding

Search

Search docs, Skills and MCP

内存预算与回放窗口

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

This page has not been translated into English yet. The original Chinese version is shown below.

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,不能把扩大回放参数当作无需成本的持久化方案。