本页译自英文文档。命令、标识符和示例保持原样。运行时 7.24.4 · SDK 2.6.7。 英文原文
内存用量
状态:当前
范围:当前状态
最近审阅:2026-09-13
负责人:ax-code 运行时
AX Code 与语言服务器、仓库构建、浏览器以及任何本地模型运行时共享机器。TypeScript 服务器或 Rust 分析器所用的内存可能超过 AX Code 后端本身。这些进程提供代码分析;它们不是语音服务。把进程 RSS 相加可能把共享页计算多次。
配置档
AX_CODE_MEMORY_PROFILE 接受 auto(默认)、low 或 normal。在 auto 下,报告物理 RAM 至多 8 GiB 的主机会选择 low;其他主机选择 normal。无效值使用自动检测。检测使用物理主机 RAM,而不是空闲 RAM 或容器内存限制;必要时在受限的虚拟机/容器中显式选择 low。在启动 AX Code 之前设置该变量;它不会重新配置已经在运行的后端。
AX_CODE_MEMORY_PROFILE=low ax-code
PowerShell:
$env:AX_CODE_MEMORY_PROFILE = "low"
ax-code
| 行为 | 正常 | 低 |
|---|---|---|
| 推测性语言服务器启动和读取预热 | 用 AX_CODE_LSP_PREWARM=1 选择加入 |
跳过,包括预热变量已设置的情况 |
| 每个 LSP 客户端的先前源文本缓存 | 16 MiB 保留内容记账 | 4 MiB 保留内容记账 |
| 并发 LSP 初始化 | 现有服务器调度 | 每个后端进程一次只初始化一个 |
| 并发语义操作 | 现有服务器预算 | 每个后端进程两个被等待的语义操作,外加现有服务器预算 |
| 健康的空闲语言服务器 | 现有生命周期 | 空闲五分钟后有资格关闭,大约每分钟检查一次 |
两种配置档下,语言服务器默认按需启动。启动和普通文件读取不会触发推测性语义预热。显式的语义导航、诊断和索引仍会启动必要的分析,因此第一次语义请求可能更久。要在余量充足的主机上恢复推测性启动/读取预热,请在启动前设置两个变量:
AX_CODE_MEMORY_PROFILE=normal AX_CODE_LSP_PREWARM=1 ax-code
只有确切的值 1 才会启用推测性预热;low 始终抑制它。此设置不会终止现有服务器,它也不是对 LSP 启动的全局禁止:需要诊断的编辑以及显式的语义/索引操作仍会使用语言服务器。低模式的空闲回收仍然分开。
源缓存还有 1,000 个条目的上限。其记账包含保守的字符串/键余量;它不是 V8 堆或 RSS 上限。放不下的文件仍会把完整的当前内容与语言服务器同步。缓存驱逐不会在请求可能需要文档时关闭该文档。
低模式是排队工作,而不是跳过分析。首次使用或空闲关闭之后的使用可能更久。已选择/已排队的客户端、待处理的底层 RPC 和诊断等待受到保护,不会被空闲关闭。超时的请求可能让服务端工作继续运行:两个被等待的操作并不保证语言服务器内部只有两次计算。空闲回收之后,诊断清单被标记为降级,因为重启一个文件不能证明对先前工作区的完整覆盖。
这些限制适用于每个 AX Code 进程内部。它们不限制总 RAM,不协调分开的 AX Code 实例,不给语言服务器堆封顶,也不控制编译器、浏览器或本地模型。模型选择、所需的提示上下文和验证命令保持不变。
会话与证据保留
TUI 为正在查看的会话保留较重的记录事件。非活动会话保留摘要、状态和待处理的批准/问题;打开它们会从 SQLite 重新加载已保存的历史。正常显示窗口是 100 条消息,序列化载荷预算为 16 MiB。先释放较旧的完整消息。最新的不可分割消息以及恢复的撤销/还原历史可以超过软预算;TUI 会显示指示器。这些是投影限制,不是对持久会话历史或模型上下文的限制。
当 V8 堆接近其硬限制时,记录预算会自动收窄(在堆使用 90% 时低至 2 MiB 下限),以便保留集合在进程到达 FatalProcessOutOfMemory 之前卸下;超过 80% 时,TUI 还会显示警告,建议 /compact 或重启。完整 GC 之后压力会恢复,但已经驱逐的历史在重新加载之前仍然消失。
在父消息之前到达的部分使用有界的待处理区域(128 个消息 ID / 1 MiB)。如果必须释放待处理内容,TUI 会提供从已保存历史重新加载。针对已驱逐消息的迟到事件不能永久重建孤儿部分。
证据缓存默认为有界内存(每个实例 128 个条目 / 4 MiB 序列化值)。RocksDB 仍为可选加入;仅改变缓存后端并不会减少模型工具调用。见 证据缓存。
后台命令输出
未读的后台输出使用私有的临时文件,而不是为每个已完成的 shell 保留数兆字节的 JavaScript 字符串。每个文件是 2 MiB 的 UTF-8 环;超出该限制的最旧未读输出会被丢弃并标记。最多 32 个环文件,每个进程最多预留 64 MiB。磁盘槽位已满时,最旧的已完成假脱机可以过期;活动 shell 的所有权不会被驱逐。读取会增量返回保留的未读输出,并释放其磁盘槽位。
登记允许每个会话 16 个活动 shell、每个进程 32 个,并最多保留每个会话 16 条已完成记录、每个进程 64 条。已完成输出在 30 分钟后过期(在访问时以及大约每分钟检查)。命令/描述列表是预览,上限为 8 KiB / 1 KiB;被执行的命令不变。观察者回放有单独的限制:每个 shell 64 KiB 和 128 条记录,以及进程范围 2 MiB 字节预算;不完整的回放会被标记。
bash_output 把输出完整性与真实进程退出状态分开报告。被丢弃、过期或不可读的输出是不完整的验证证据,即使命令以代码零退出。使用输出过滤器时这些通知仍然可见。记录缺失可能意味着它已被消费或驱逐;输出不可用并不能证明检查通过。
文件使用私有的、进程拥有的临时目录(0700),在 POSIX 上文件为 0600。读取、会话移除、保留清理和正常进程退出会释放拥有的文件。该假脱机不是可在崩溃后保留的会话存储。强制终止或崩溃可能留下私有临时目录;没有实现自动的跨进程清理,因此 64 MiB 限制描述的是当前进程,而不是累积的崩溃残留。文件系统清理错误会被报告,并且不会释放失败文件的配额预留。同步的有界文件 I/O 避免无界写队列,但在缓慢的临时文件系统上可能增加延迟。
选择工作负载
对受限主机,先使用云提供方、一个活动编码会话和一个小仓库。仅当机器有余量时才运行大型构建和额外的智能体会话。本地推理需要为权重、KV 缓存/上下文和运行时开销单独预算;云提供方的硬件指引不适用于它。
日常使用请用打包的 CLI;pnpm run dev 是贡献者源码工作流,启动和模块加载成本不同。在活动监视器或平台进程监视器中,把 AX Code 与其语言服务器和构建子进程一起查看。降低的缓存上限并不能确立物理内存的固定减少。
这些内存变更有确定性的保留和语义等价测试。它们尚未在物理 8 GB Mac 上通过负载测试资格确认。低模式并不保证任意项目都能放进 8 GB 机器。