AI Vault 超大转录记录¶
本地/WSL 增量 JSONL 读取器会累积无换行符记录的每个数据块,然后在换行符或 EOF 处拼接并解码整条记录。其片段列表避免了平方级复制,但未限制内存。读取器和扫描器子进程的 384 MiB V8 旧空间设置都存在于 v1.4.198;该堆设置不会对外部缓冲区施加 384 MiB 的进程 RSS 上限。
该修复共享现有流式远程读取器的 10 MiB 记录限制,并在保留、拼接或解码超大记录之前检查本地字节数。它通过现有扫描问题路径拒绝该会话读取;不会静默丢弃记录,也不会在失败后推进已持久化的恢复点。因此,大于 10 MiB 的合法记录在该次扫描中不可用。包含许多较小记录的大文件仍可正常工作。这覆盖可恢复的 JSONL 路径,而非所有整文档/导入读取器。
复现¶
该脚本在临时本地文件中写入一条 64 MiB 的合成记录,并打包实际读取器。仅将文件系统适配器替换为等效的原生 createReadStream 路径,外加一个字节计数器。基线在内存中移除三个新的预算检查。每个用例都在自己的 Node 进程中运行,并设置 --max-old-space-size=384;同时测试已终止和未终止的记录。临时文件会被删除。结果和捆绑包哈希 在 macOS 上使用 Node v26.6.0 捕获。
| 用例 | 读取字节数 | 读取后外部分配增量 | 峰值 RSS |
|---|---|---|---|
| 修复前,未终止 | 67,108,864 | 201,303,426 | 248.25 MiB |
| 修复后,未终止 | 10,551,296 | 10,528,130 | 62.13 MiB |
| 修复前,已终止 | 67,108,865 | 201,368,963 | 248.22 MiB |
| 修复后,已终止 | 10,551,296 | 10,528,130 | 62.16 MiB |
RSS 包含运行时开销;分配器行为会有差异。机制是无限制的记录组装及其副本,而非精确的采样值。普通的已终止记录之后可以被回收;这是峰值分配/OOM 风险,而不是每次读取后存在永久泄漏的证据。
验证:五个读取器/远程/缓存/WSL 套件中的 71 个测试通过,随后读取器和缓存恢复套件中的 10 个测试通过(其中 9 个重叠)。回归测试覆盖全部三种组装路径、精确字节边界、Unicode、大型多记录文件、迭代器清理,以及未变化的缓存恢复状态后成功修复。完整 typecheck、最终 node typecheck、lint 和变更代码质量检查均通过。测试使用了 ORCA_BACKGROUND_LAUNCH=1。
这是应用进程组内另一个可达的分配机制。#19831 并未确认存在超大转录记录。在报告的构建中,正常扫描运行在子进程中,因此该路径无法解释 #19768 中孤立的 main-PID 测量。未声称受影响主机归属。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca