goland需调最大并发索引数以避免i/o争抢和gc压力;当项目含多go.work子模块或大量vendor时,过高并发会导致磁盘队列爆满、索引进度停滞,须配合vendor排除与go.work支持协同优化。

GoLand 为什么需要调最大并发索引数?
不是所有“卡在 indexing…”都靠加内存解决。当项目含多个 go.work 子模块或大量 vendor 目录时,IDE 默认会并行扫描所有路径,但默认并发数(通常为 CPU 核数)可能过高——导致线程争抢磁盘 I/O、触发频繁 GC、甚至让 SSD 队列深度爆满。现象是:CPU 占满但磁盘利用率低、索引进度条不动、idea.log 里反复出现 FileIndexingTask 超时或 Too many files to index 警告。
怎么改 indexing.concurrency 参数?
这个参数不暴露在 Settings UI 里,必须手动写进 IDE 的配置文件:
- 关闭 GoLand
- 编辑
idea.properties文件(路径同goland.vmoptions,只是后缀不同) - 追加一行:
indexing.concurrency=2(推荐值:2~4;超过 4 在多数 SSD 上收益递减) - 重启 IDE
注意:indexing.concurrency 和 JVM 堆内存无关,它只控制索引任务的线程池大小。设太高反而会让小文件 IO 变成随机读,拖慢整体吞吐;设太低(如 1)则无法利用多核,大项目首次索引时间翻倍。
vendor 目录必须排除,否则并发再低也白搭
GoLand 默认把 vendor 当作源码目录,每次修改任意 .go 文件都会触发对整个 vendor 的增量 re-index。哪怕你把并发数设成 1,它还是得逐个扫描几万个第三方包里的测试文件、docs、非 Go 资源。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 进入
Settings → Directories - 右键点击
vendor目录 →Exclude - 确认
vendor左侧图标变成灰色小叉,而非蓝色文件夹 - 如果项目用
go.work,确保vendor不在任何use路径下——否则 Exclude 会被覆盖
排除后,IDE 仅在首次加载时解析 vendor 一次(用于跳转和补全),后续修改不再触发其 re-index。
并发索引 + go.work 支持必须同时开
只调 indexing.concurrency 不启用 go.work 支持,IDE 仍会按旧逻辑把每个子模块当独立项目扫描,导致并发任务实际在重复处理同一份依赖代码。
- 确认 GoLand 版本 ≥ 2023.2(Help → About → Build number ≥ 232.9559.62)
- Settings → Go → Modules → 勾选
Enable Go workspaces support - 取消勾选
Auto-detect modules - 删掉
.idea/modules.xml和.idea/misc.xml,重启强制重建 module 关系
做完这四步,indexing.concurrency=2 才真正作用于跨模块的协调索引,而不是各自为政地扫一堆重叠路径。
真正卡住的从来不是单个参数,而是 indexing.concurrency、vendor 排除、go.work 启用三者没对齐——漏掉任意一个,调再低的并发数,索引照样在后台默默重复扫描同一片代码。










