Manjaro环境下IntelliJ IDEA索引JDK时冻结无响应如何解决
运行环境
- 操作系统:Manjaro Linux
- IDE:IntelliJ IDEA 社区版,版本号
4:2022.1.3-1 - 项目配置:基于JDK 17开发,采用Maven管理依赖
故障表现
IntelliJ IDEA启动JDK索引流程后会出现挂起问题:索引启动初期程序可正常响应,若在JDK索引过程中执行输入内容、打开新菜单等操作,程序会立刻冻结无响应,仅能通过强制终止进程关闭。
故障首次出现于尝试引入
luaj-jse-3.0.2依赖库之后,曾有一次移除该库后成功启动IDEA,但后续重复相同操作始终无法复现该次成功结果。
已尝试的无效排查手段
- 重新安装IntelliJ IDEA
- 安装其他版本的IntelliJ IDEA
- 移除luaj依赖库(仅首次操作成功过1次)
- 删除项目的
.idea文件夹 - 通过
strace运行IntelliJ IDEA追踪问题 - 长时间等待程序自行恢复
- 组合使用上述多种排查操作
修复方案
按优先级依次操作即可:
- 清理IDEA全局索引缓存
先完全关闭所有IDEA进程,直接删除IDEA全局缓存目录,Manjaro下2022.1版本社区版对应路径为~/.cache/JetBrains/IdeaIC2022.1/。此前仅删除项目.idea文件夹、重装IDE无效的核心原因是,错误生成的luaj相关损坏索引残留在全局缓存中,只要触发全量JDK索引就会读取到损坏的索引块,直接锁死UI线程。 - 调整IDEA运行JVM参数
编辑IDEA的VM配置文件,对应路径为~/.config/JetBrains/IdeaIC2022.1/idea64.vmoptions,新增或修改以下参数:
调低索引线程数、关闭批量索引更新,避免索引时内存占用过高触发系统级进程锁死,同时给IDE分配足够堆内存,减少GC长时间停顿导致的UI假死。-XX:+UseG1GC -Xms2048m -Xmx4096m -Didea.indexer.thread.count=2 -Didea.indices.usebulk.update=false - 首次重建索引时避免UI操作
完成前两步后第一次启动IDEA打开项目,不要点击任何菜单、不要输入代码,等底部索引进度条完全走完、所有依赖加载完成后再进行操作。首次索引完成后IDE会写入正确的索引缓存,后续启动不会再出现同类锁死问题。 - 极端情况排除问题依赖的索引范围
如果以上操作仍无法解决,打开项目Maven依赖列表,找到luaj-jse-3.0.2,右键选择Mark Directory as->Excluded,将该依赖排除在自动索引范围外。luaj 3.0.2版本包含部分非标准结构的字节码文件,IDEA 2022.1版本的索引器解析这类文件存在已知bug,排除后不影响正常代码补全、编译运行,仅会跳过对该依赖内部源码的深度索引。
内容的提问来源于stack exchange,提问作者Bam
相关产品推荐
相关产品推荐

