Qwen Code 遇大目录 glob 触发堆 OOM:每目录缓存一份 gitignore 匹配器
XxCotHGxX · ghdev · 2026-09-18
QwenLM/qwen-code 的 issue #12151 报告:在一个仅约 3.8k 跟踪文件、但含约 53.2 万未跟踪实验输出文件的仓库里,模型执行 /something/metrics.py 这类 glob 后几分钟内即崩溃,报 JavaScript heap out of memory。
根因不在遍历本身:自 #6123 起 glob 会对进入的每个目录检查 ignore 规则,GitIgnoreParser.isIgnored() 经 getIgnorerForDir() 为每个目录新建一个 ignore() 实例,重新加入 .git、.git/info/exclude 及从根到该目录的所有 .gitignore 规则,并存入永不清理的 ignorerCache。FileDiscoveryService 整个会话常驻,于是每个目录都持有一份编译后的规则副本(外加内部路径结果缓存)。以约 45 条规则的根 .gitignore 计,约 8 KB/目录,遍历远未结束就撞上默认约 4 GB 堆上限。
直接跑 GlobTool + FileDiscoveryService(不涉及模型)、--max-old-space-size=4096、强制 GC 后测活堆:
- 0.23.3 原版:11s 646 MB,27s 1429 MB,56s 2723 MB,约 97s OOM
- 完全不加 ignore 规则:遍历中峰值 1558 MB(此时走 109 万条目,因 .venv 等未被跳过),31s 结束回落到 64 MB
- 应用修复后:遍历中峰值 727 MB,52s 完成
「编程与Agent」频道最新
- 用户让 Codex 重启服务器,它毁掉 systemd 和容器,损失超 1 万美元 — jonathan_wilke · 2026-11-04
- 游戏开发者辟谣:AI 一天做出完整游戏多为炒作 — bendee983 · 2026-11-04
- 用 ChatGPT 从 Excel 一键生成带地图联动的交互式仪表盘 — TermRemarkable665 · 2026-11-04
- 开发者称 Agent 把开发周期从数周压缩到一天 — Suspicious_Orchid770 · 2026-11-04
- YC 孵化 Orgo:为 AI Agent 提供专属云桌面,已服务超 1000 团队 — Scobleizer · 2026-11-04
- 开发者自述:Vibe Code 出 PMF 产品后,工程化烂摊子靠专业开发救场 — sujingshen · 2026-11-04