[bug反馈] 超长会话因流式增量碎片(reasoning-chunks / text-chunks)未自动清理导致内存溢出 (OOM) 与历史加载失败 #5347
zlinwzx147258
started this conversation in
Ideas
Replies: 2 comments
|
是的,OOM严重,现在都只能开着NODE_OPTIONS="--max-old-space-size=4096"用,还很担心,node进程内存经常彪到4G。 |
0 replies
实测补充:读侧物理删除 chunk 碎片不可行(会被稠密 seq + fold 连续性校验挡住),修复需落在写入端感谢这个分析,我这边在 macOS 桌面上复现了同类 OOM,并顺着你的思路做了一次"读侧删碎片"的实测,结论是这条路走不通,希望能帮到修复方向的定位。 一、我这边观察到的 OOM(与你的现象一致)
二、碎片规模:存储行数被放大 3 个数量级用官方 codec 展开(
即:打开一个大会话 = 堆里造出 130 万 ~ 246 万个细碎对象,与你说的"数百万个细碎 JSON 对象"量级吻合。 三、实测:读侧删除碎片不可行方法(只读,未改动任何文件):用官方原语 结果: 原因(都是设计上的硬约束):
所以"事后清理 append-only 日志"这条路,会被 seq 稠密性 + 折叠校验这两道不变量挡住;要绕过就得重编号整个 四、由此建议的修复方向(写入端,而非读侧)
如果需要,我可以提供复现脚本与脱敏后的日志样本( 备注:以上数据来自一台使用中的机器(1,117 个会话、其中 14 个 >4 MB),会话内容未上传,仅提供统计口径与错误信息。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
1. 问题背景与现象描述
在长轮次会话(如 500+ 轮,使用深度思考模型并伴随大量工具调用的复杂工程任务)中,dsh Web 服务端在尝试加载该会话历史时,
会持续报错 历史加载失败:Failed to fetch(internal),后端进程频繁因 V8 堆内存溢出崩溃。
排查发现,会话持久化归档(session.jsonl.zstd)中堆积了海量的单字流式增量事件(reasoning-chunks、text-chunks、
assistant/chunk 等)。这些流式增量分片在生成阶段用于前端实时打字机动效,但在单轮对话结束后仍永久保留在追加日志
(append-only log)中。
当单会话的增量事件累积到数百万条时,打开会话会触发严重问题:
Node.js V8 堆内存耗尽:全量反序列化数百万个细碎 JSON 对象,瞬间突破 --max-old-space-size=4096 限制导致 OOM 崩溃。
GC 全停顿(Stop-the-World)引发超时:V8 管理数百万微小对象时垃圾回收停顿长达数秒甚至数十秒,导致前端 RPC/HTTP 请求
超时(Failed to fetch)。
前端浏览器崩溃:直接传输全量数据会导致浏览器标签页内存暴涨甚至白屏闪退。
———
2. 根因分析
流式分片无界膨胀且未在落盘后固化清理:每次大模型吐出的单字 delta 都会写入 session.jsonl。在一个 636 轮的真实会话中,
累计产生了 826 万条流式分片记录(压缩包达 107MB,解压后纯文本接近 1GB)。
数据冗余与生命周期错位:当一轮对话结束时,所有思考链文本、最终回答及工具调用参数已完整合并并固化在最终的 assistant/
message 语义事件中(data.message.content 下完整保留了 reasoning 和 tool-call 节点)。中间产生的流式增量已无业务价
值,却仍常驻日志。
加载器缺乏惰性分页与投影机制:服务端在打开会话时一次性将全部事件反序列化进内存,而非按需加载或仅读取语义节点。
———
3. 实测数据对比(以会话 session-db1773c0-7501-4bc9-a48c-0ee2acd0d122 为例)
📉 存储与资源开销
🛡️ 业务数据完整性验证(100% 无损保留)
注:经内核 foldSurface 与 TokenMeter 投影校验,会话中包含的 636 轮用户输入、最长达 1.7 万字的思考链、所有工具调用与执
行输出 100% 无损保留。
———
4. 优化建议
会话轮次结束时自动执行增量清理(Auto Compaction):
流式分片(*-chunks、assistant/chunk)。
提供官方离线会话压缩与修复 CLI:
过断言校验。
Web 端流式分页加载:
———
5. 复现环境信息
All reactions