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 后测活堆:

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →