一尘不染

为什么IntelliJ IDEA挂在“索引”上?

java

想要改善此职位? 提供有关此问题的详细答案,包括引文和为什么您的答案正确的解释。答案不够详细的答案可能会被编辑或删除。

我在Arch Linux,i7-5930k 6核心CPU和64GB DDR4 RAM上运行,并且正在使用IntelliJ IDEA 14。

几天前,IDEA对我来说还算不错,但是有一天,突然间,它在“索引”阶段打开项目后就开始挂起。我没有更新IDEA,并且我的项目没有任何改变。打开项目后,IDE的UI会挂起,进度条中只有一小部分可以完成“索引编制”。每隔5到10分钟左右,它会冻结一次,进度栏会向前爬行一点,然后IDE再次冻结几分钟。这会在15分钟到一个小时之间的任何地方重复发生,直到最终完成索引编制,此后它又挂了5-10分钟,什么也不做,直到最终解锁并让我发展。

发生这种情况时,我的系统反应迟钝-
Firefox选项卡需要很长时间才能切换,滚动它们的时间很长。打开新的终端窗口需要很长时间。切换窗口通常需要一段时间。在中htop,我的一个CPU内核的负载为100%,而其余的则为正常负载,并且使用了大约6GB的RAM(在此系统空闲时,这是相当正常的负载)。

我尝试过的事情没有帮助:

  • 删除缓存文件夹
  • 删除整个〜/ .IntelliJIDEA14文件夹
  • 重新安装IntelliJ程序包
  • 从JetBrains的站点手动下载IntelliJ并从我的“下载”文件夹中运行它(以查看Arch AUR软件包是否有问题)
  • 配置IntelliJ以使用我的系统JVM和Maven进行导入,而不是使用其嵌入式工具
  • 打开多个不同的项目(不仅仅是我最初遇到该问题的那个项目。)

这个问题确实伤害了我的工作流程,如果有人对此有任何解决方案,我将非常感激。


阅读 438

收藏
2020-12-03

共1个答案

一尘不染

我终于明白了。解决的办法是……比较奇怪。TL; DR:在下运行strace。继续阅读以获得更详细的解释。

当我决定在下面运行IntelliJ strace来查看它正在打开哪些文件以确定它是否是文件系统瓶颈时,我遇到了它。

这给了我一些非常奇怪的结果:strace正在喷涌出几乎恒定的段错误。不仅如此,而且IntelliJ的运行也很好,不会花很多时间索引。

与朋友协商后,我了解到,在Arch Linux上,每次发生段错误时,systemd都会记录进程内存的转储, 除非附加了调试器
strace被认为是调试器。由于所有段错误,Arch保持日志内存转储时,它一直在挫败我的磁盘,因此为什么索引要花这么长时间,因为它在争夺磁盘I /
O。

我现在的解决方案是简单地在IntelliJ下运行strace。但是,我将进一步研究该问题,因为我认为java应该不会进行过多的讨论。

2020-12-03