我在Arch Linux上运行i7-5930k 6核CPU和64GB DDR4 RAM,我正在使用IntelliJ IDEA 14。
几天前,IDEA对我来说工作得很好,但是有一天突然间,在“索引”阶段开始项目后,它开始挂起了。我没有更新IDEA,也没有改变我的项目。 IDE的UI在打开项目后挂起,只需要一小段“索引”完成的进度条。每隔5-10分钟左右解冻,进度条向前爬一点,然后IDE再次冻结几分钟。这种情况反复发生在15分钟到1小时之间,直到它最终完成索引,此时它会再次挂起5-10分钟,最后解锁并允许我开发。虽然这种情况正在发生,但我的系统却没有反应 - Firefox标签需要很长时间才能切换,而滚动它们是滞后的。打开一个新的终端窗口需要很长时间。通常切换窗口需要一段时间。在htop
中,我的一个CPU内核以100%加载,而其余的CPU负载正常,并且使用了大约6GB的RAM(当系统空闲时相当正常的负载。)
我尝试过的事情没有帮助:
这个问题确实伤害了我的工作流程,如果有人对此有任何解决方案,我会非常感激。
答案 0 :(得分:41)
尝试Invalidating the cache and restarting IntelliJ。
在文件菜单中,选择使缓存无效/重新启动... ,然后点击无效并重新启动按钮。
答案 1 :(得分:17)
我终于明白了。解决方案是......相当奇怪。 TL; DR:在strace
下运行它。继续阅读以获得更详细的解释。
strace
下运行IntelliJ以查看它打开的文件以确定它是否是文件系统瓶颈时,我发现了它。
这给了我一些非常奇怪的结果:strace
喷出了几乎不变的段错误。不仅如此,IntelliJ运行得很好,而不是永远指数。
在与朋友协商后,我了解到在Arch Linux上,systemd会在每次发生段错误时记录进程内存的转储,除非连接调试器。 strace
被视为调试器。 Arch因为所有的段错误而不断记录内存转储时,正在颠覆我的磁盘,因此为什么索引耗时这么长,因为它正在争夺磁盘I / O.
我现在的解决方案是在strace
下运行IntelliJ。但是,我会进一步研究这个问题,因为我认为java
不应该是那么多的分裂。
答案 2 :(得分:11)
编辑Intellij [VERSION] /bin/idea.properties,
设置idea.max.intellisense.filesize=50
<强>更新强> Intellij将跳过大于50kb的索引文件。如果您有许多库或许多大文件(一行或太多行中的字符太多)
答案 3 :(得分:8)
我在Mac OS X上的版本2016.2也有这个问题。我不得不强行退出以结束应用程序,然后删除了.idea文件夹。下次我启动IntelliJ时一切正常,它没有问题索引项目。
答案 4 :(得分:5)
选择帮助 - &gt;调试日志设置...
添加以下行(注意前导#符号)
#com.intellij.util.indexing:微量
重新启动IDE(不需要使缓存无效,因为这将导致它从头开始,而从故障点重新启动,无论如何,我一重新报告问题文件):
根据索引Stubs的请求调度file:// C:/dev/tools/ruby/lib/ruby/2.2.0/x64-mingw32/win32ole.so的索引
我们的项目没有使用win32ole所以我将文件移动到一个安全的位置并重新启动我的IDE ...宾果,问题消失了,索引最终完成了近1年后有效地使用intellij作为一个稍微聪明的比记事本红宝石编辑。
答案 5 :(得分:1)
过去在一些Scala项目中遇到过同样的问题。我已经安装了IDEA 16 EAP(https://confluence.jetbrains.com/display/IDEADEV/IDEA+16+EAP)并且问题已经解决了。
答案 6 :(得分:1)
在我的情况下,我发现Intellij实际上是在尝试使用项目根目录下的日志索引50GB目录。如果您有这样的目录,请确保在IDE中将其标记为“已排除”。
您可以在“索引状态”窗口中查看IDE当前正在索引的文件(通过单击工具栏中的索引消息进行访问)。您可能需要放大此窗口以查看当前正在编制索引的文件的完整路径。
答案 7 :(得分:1)
在PhpStorm中,为我解决这个问题的是排除了我不需要从索引编制索引的文件夹(特别是供应商文件夹,缓存文件夹和包含数千个图像的一些资产文件夹)。它立即开始取得进展并完成。
要做到这一点:
答案 8 :(得分:1)
我在最新的 IntelliJ Idea 2019.3 中遇到了类似的问题,所以也许会有所帮助。对我来说,问题出在其中一个插件上,卸载/重新安装,清理缓存都无济于事。我的步骤是:
如果上面的第4步成功(发生在我身上),请一一尝试启用插件,以查看导致错误的插件。对我来说,它是来自 JetBrains 的 Kubernetes 插件。
答案 9 :(得分:1)
似乎有很多原因进入这个“索引”地狱。我花了几个小时尝试使用上面的想法来修复它。 归根结底,通过一些性能分析工作,我发现坏人是csv插件: https://plugins.jetbrains.com/plugin/10037-csv-plugin
我只有很少(不是很大)的CSV文件作为输入,尽管我将它们标记为不被索引,但是插件仍在尝试为它们建立索引。 删除插件后,一切正常。
答案 10 :(得分:0)
IntelliJ 2017.3.2遇到了同样的问题。当我点击索引进度条时,我注意到它挂在我的构建目录中的目录上。当我执行gradlew clean删除该目录时,索引就可以继续了。
答案 11 :(得分:0)
我遇到了这个问题,并解决了它:
我也尝试删除想法缓存文件,它不起作用。
答案 12 :(得分:0)
我在2019.1.4中遇到了类似的问题。但是,我会更改目录并有时 最终完成。如果完成,则大约在8-10分钟内。
我到处都是SO,甚至是JetBrains的论坛。我通过Project Structure | Modules
排除了目录。我曾多次使用Invalidate Caches And Restart
。我尝试只打开一个项目以使其完成。我安装并尝试了2019.2.4和2019.3.3(后者会由于其他原因而崩溃)。最重要的是,它似乎只发生在一个项目上!
最终使我得到答案的是Help > Activity Monitor...
,我发现psi.impl.cache.impl.todo
的CPU运行率接近100%,没有停止的迹象。
原来,我有一个TODO过滤器设置和一个定义不明确的RegEx。就像\b.*wip\b.*
一样;当时的想法是找到我们所有的“在制品”价值。好吧,领先的.*
是一个巨大的错误,直到我将许多时间归咎于插件升级之后,我才意识到这个错误。我认为这是一个不好的过滤器,原因是它挂在的项目是在ExtJS(即JavaScript)中,这意味着事情与app.js
文件一式三份……
答案 13 :(得分:0)
已发布的答案可能对大多数人有所帮助。就我而言,我发现还有另一个项目(正在编制索引)是并行打开的。因此,我当前的项目正在等待其他项目完成索引。最后,在对当前项目进行索引之后,再对当前项目进行索引。
答案 14 :(得分:-1)
我能够通过从项目中删除所有“目标”文件夹来解决此问题。