fuat(分析): 内存预算下的适应性工人货币 + 更安静的重建门 + 持续的需求 FullRebuild mark(OOM业务从25k文件重集中反馈)
作者: ChunxueLi创建于 2026年9月2日更新于 2026年9月17日
1. 适应性工作线程并发性在内存预算下(--memory-budget 或自动)
今天,工作线程数(以及因此的峰值 RSS)实际上是固定的,因此 25k 文件的 repo 的全面分析需要一个主机大小的堆,否则在 3 小时后就无法显示任何内容。建议:
- 添加可选的内存预算(例如 --memory-budget-mb=4096 或 env GITNEXUS_MEMORY_BUDGET_MB)。
- 设置时,从预算中衍生工作线程数(开始时保守: max(1, budget / perWorkerEstimate)),并在内存压力下,当 worker.replace 失败时 删除工作线程槽,而不是崩溃 - 池中已经有了“删除槽”概念,只是太晚了(在替换失败后),并且运行在主线程上仍然会在稍后时段死亡。
- 即使没有显式标志,也有一个更便宜的方法:当替换工作线程无法上线并且原因字符串包含“内存压力”时, 将活动工作线程数减半 并记录它,而不是以相同的宽度重试。 要明确说明的权衡:更少的工作线程 = 更慢的解析,但在 1.5 倍的墙时钟上完成的运行要好于在 3.7 小时后 OOM 并使 repo 无法索引的运行。
内容来源: abhigyanpatwari/GitNexus