为什么 IntelliJ IDEA 挂在 "Indexing" 上?
Why is IntelliJ IDEA hanging on "Indexing"?
我运行正在使用 Arch Linux、i7-5930k 6 核 CPU 和 64GB DDR4 RAM,并且我正在使用 IntelliJ IDEA 14.
IDEA 几天前对我来说工作得很好,但有一天,突然,在 "Indexing" 阶段打开一个项目后,它开始挂起。我没有更新 IDEA,我的项目没有任何变化。 IDE 的 UI 在打开项目后挂起,"Indexing" 完成的进度条只有一小部分。每隔 5-10 分钟左右它就会解冻,进度条会向前爬一点,然后 IDE 会再次冻结几分钟。这种情况在 15 分钟到一个小时之间的任何地方重复发生,直到它最终完成索引,此时它又挂起 5-10 分钟什么都不做,然后它最终解锁并允许我开发。
发生这种情况时,我的系统反应迟钝 - Firefox 选项卡需要很长时间才能切换,并且在其中滚动很慢。打开新终端 window 需要很长时间。切换 windows 一般需要一段时间。在 htop
中,我的一个 CPU 核心以 100% 加载,而其余的核心负载正常,并且使用了大约 6GB 的 RAM(此系统空闲时负载相当正常。)
我尝试过但没有帮助的事情:
- 删除缓存文件夹
- 删除整个 ~/.IntelliJIDEA14 文件夹
- 重新安装 IntelliJ 包
- 从 JetBrains 的站点手动下载 IntelliJ 并从我的下载文件夹运行下载它(查看 Arch AUR 包是否有问题)
- 将 IntelliJ 配置为使用我的系统 JVM 和 Maven 而不是其嵌入式工具进行导入
- 打开多个不同的项目(不仅仅是我最初遇到问题的项目。)
这个问题确实影响了我的工作流程,如果有人对此有任何解决方案,我将不胜感激。
我终于想通了。解决方案是......相当奇怪。 TL;DR:运行 它在 strace
之下。继续阅读以获得更详细的解释。
当我决定 运行 IntelliJ 在 strace
下查看它打开了哪些文件以确定它是否是文件系统瓶颈时,我遇到了它。
这给了我一些非常奇怪的结果:strace
喷出近乎恒定的段错误流。不仅如此,IntelliJ 还 运行ning 很好,不需要永远索引。
在咨询了朋友之后,我了解到在 Arch Linux 上,systemd 会在每次发生段错误时记录进程内存的转储,附加调试器时除外. strace
被认为是调试器。由于所有段错误,Arch 在不断记录内存转储时正在抖动我的磁盘,这就是为什么索引需要这么长时间,因为它正在争夺磁盘 I/O.
我现在的解决方案是 运行 strace
下的 IntelliJ。但是,我会进一步研究这个问题,因为我认为 java
不应该出现那么多的段错误。
过去在某些 Scala 项目中遇到过同样的问题。我已经安装了 IDEA 16 EAP (https://confluence.jetbrains.com/display/IDEADEV/IDEA+16+EAP),问题已经解决了。
编辑 Intellij[VERSION]/bin/idea.properties,
设置 idea.max.intellisense.filesize=50
更新:
如果您有许多库或许多大文件(一行太多字符或太多行)
,Intellij 将跳过大小大于 50kb.try 的索引文件
尝试Invalidating the cache and restarting IntelliJ。
在文件菜单中,select使缓存无效/重新启动...然后单击无效并重新启动按钮。
我在 Mac OS X 上的 2016.2 版也遇到了这个问题。我不得不强制退出以结束应用程序,然后我删除了 .idea 文件夹。下次我启动 IntelliJ 时一切正常,索引项目也没有问题。
Select 帮助 -> 调试日志设置...
添加以下行(注意前导 # 符号)
#com.intellij.util.indexing:trace
重新启动 IDE(不需要使缓存失效,因为这会导致它从头开始,而从故障点重新启动,无论如何,对我来说,一旦我报告了问题文件重新启动):
Scheduling indexing of file://C:/dev/tools/ruby/lib/ruby/2.2.0/x64-mingw32/win32ole.so by request of index Stubs
我们的项目不使用 win32ole,所以我将文件移动到安全位置并重新启动我的 IDE...宾果游戏,问题消失了,在有效使用 intellij 将近 1 年之后终于完成了索引比记事本 ruby 编辑器稍微聪明一点。
我在使用 IntelliJ 2017.3.2 时遇到了同样的问题。当我单击索引进度条时,我注意到它挂在我的构建目录中的一个目录中。当我执行删除该目录的 gradlew clean 时,索引就可以继续了。
我遇到过这个问题,并解决了:
- 删除想法
- 删除我电脑中所有名为'jetbrain'和'IntelliJ'的文件和目录(Mac mini )
- 然后安装idea
我也试过只删除idea缓存文件,不行。
在我的例子中,我发现 Intellij 实际上试图用项目根目录下的日志索引一个 50GB 的目录。确保如果您有这样的目录,它在 IDE.
中被标记为 "Excluded"
您可以在索引状态 window 中查看 IDE 当前正在索引哪个文件(通过单击工具栏中的索引消息访问)。您可能需要放大此 window 以查看当前正在编制索引的文件的完整路径。
在 PhpStorm 中,为我解决这个问题的是从索引中排除我不需要索引的文件夹(特别是供应商文件夹、缓存文件夹和一些包含数千张图像的资产文件夹)。瞬间开始进步并完成。
为此:
- 在项目目录列表中,右键单击要排除的文件夹
- 将目录标记为
- 排除
我通过从项目中删除所有 "target" 文件夹解决了这个问题。
我在最新的 IntelliJ Idea 2019.3 中遇到了类似的问题,所以也许它会有所帮助。对我来说,问题出在其中一个插件 uninstalling/reinstalling 上,清理缓存没有帮助。我的步骤是:
- 杀掉 intellij,重新开始
- 在启动和即将加载项目时,请快速取消打开项目。这样您最终会得到一个小的 window,其中包含以前打开的项目列表和一些菜单项。
- 打开菜单 > 插件,全部禁用
- 重启intellij idea,打开任意项目。
如果上面的第 4 步成功(这发生在我身上),请逐一尝试启用插件以查看是哪个插件导致了错误。对我来说,它是 Kubernetes 来自 JetBrains 的插件。
我在 2019.1.4 遇到了类似的问题。然而,我的会改变目录,有时,最终,完成。如果确实完成了,则在 8-10 分钟范围内。
我到处都是,甚至 JetBrains 的论坛。我通过 Project Structure | Modules
排除了目录。我多次使用 Invalidate Caches And Restart
。我尝试只打开 1 个项目让它完成。我安装并尝试了 2019.2.4 和 2019.3.3(后者会因为其他原因崩溃)。最重要的是,它似乎只发生在一个项目上!
最终让我得到答案的是 Help > Activity Monitor...
我发现 psi.impl.cache.impl.todo
运行 接近 100% CPU 并且没有停止的迹象。
事实证明,我有一个 TODO 过滤器设置,其中的 RegEx 定义不明确。有点像 \b.*wip\b.*
;这个想法是找到我们所有的“WIP”值。好吧,领先的 .*
是一个巨大的错误,直到我花了很多时间指责插件升级后才意识到这一点。我相信这是一个糟糕的过滤器的原因是因为它挂在 ExtJS 中的项目是 JavaScript,这意味着 app.js
文件和诸如此类的东西一式三份...
更新
在 IntelliJ 2020.x 和 2021.x 中,该选项已移至 Help > Diagnostic Tools > Activity Monitor
。
看来进入这个"indexing"地狱可能有几个原因。我花了几个小时尝试使用上面的想法修复它。
在一天结束时,通过一些分析工作,我发现我的案例中的坏人是 csv 插件:
https://plugins.jetbrains.com/plugin/10037-csv-plugin
我有几个(不是很大)CSV 文件作为输入,虽然我将它们标记为不被索引,但插件一直在尝试为它们建立索引。
删除插件后,一切正常。
可能在新 window 中同时打开了另一个正在编制索引的项目。
我使用的是 Elm 插件并安装了 elm-bounded-nats 包,其中包含一个半大型源文件。 IntelliJ 一直挂在这个文件上,但并不总是在索引弹出对话框中正确报告(可能是由于线程)。当我在设置 -> 文件类型 ("Nats.elm") 中排除这个特定文件时,索引成功完成。现在编辑器为这个包呈现错误,但编译过程仍然有效。
我运行今天就入了这个问题Mac。它会在我能够进入菜单并使缓存无效之前挂起。
我使用以下命令从命令行删除了缓存,它对我有用。
rm -rf ~/Library/Caches/JetBrains/IntelliJIdea*
之后就没有问题了。
禁用未使用的插件将改进索引。在我的例子中,我已经从 File -> Settings->Plugins
禁用了 Kotlin 插件
如果您检查 intellij 日志(可以在 C:\Users.IntelliJIdea2019.1\system\log 下找到),您将得到一个失败的指针。我在 Kotlin 中遇到错误。禁用插件并重新启动 Intellij 后解决了我的问题
java.lang.RuntimeException: java.io.EOFException
at com.intellij.util.ExceptionUtilRt.rethrow(ExceptionUtilRt.java:31)
at com.intellij.util.ExceptionUtil.rethrow(ExceptionUtil.java:120)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.handleError(FSRecords.java:516)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.access[=10=]0(FSRecords.java:153)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords.writeAndHandleErrors(FSRecords.java:965)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords.access0(FSRecords.java:47)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$AttributeOutputStream.close(FSRecords.java:1629)
at kotlin.io.CloseableKt.closeFinally(Closeable.kt:53)
at org.jetbrains.kotlin.idea.caches.FileAttributeServiceImpl.write(FileAttributeServiceImpl.kt:64)
at org.jetbrains.kotlin.idea.caches.FileAttributeServiceImpl.writeBooleanAttribute(FileAttributeServiceImpl.kt:48)
at org.jetbrains.kotlin.idea.caches.IDEKotlinBinaryClassCache.getKotlinBinaryClass(IDEKotlinBinaryClassCache.kt:67)
at org.jetbrains.kotlin.idea.caches.IDEKotlinBinaryClassCache.getKotlinBinaryClassHeaderData(IDEKotlinBinaryClassCache.kt:8
在 IntelliJ 2021.3 Ultimate 上无效缓存和重启对我不起作用。
我很想知道 2021.3 Ultimate 版本的新 Repair IDE 功能是否可以解决我 mac.
上的这个问题
- 启动时,IntelliJ 在索引时冻结
- 强制退出并重新启动 IntelliJ
- 在启动时,从底部的状态栏手动“暂停”索引
- 缓存无效并重新启动
- 索引时仍然冻结
- 强制退出并重新启动 IntelliJ
- 启动时重复步骤 #2
- 从文件菜单,执行修复IDE,并完成修复步骤
- 已修复;不再冻结索引
- 退出 IntelliJ 并重新启动
- 没有索引问题
我也遇到了 intellij 2021.3 的冻结问题。早些时候我使用的是 intellij 2021.1 版本并且工作正常但是自从我将 intellij 版本升级到 2021.3 它开始冻结文件索引。
此线程中有人建议使用 修复 IDE 功能修复 ide。但这对我不起作用。
因此,我浏览了 intellij 日志文件夹中可用的线程转储。分析日志后,我发现调用 Package Search 插件被阻塞。因此,我在设置 -> 插件中禁用了该插件。为此,我不得不暂时在开始时暂停索引。禁用此插件后,它对我来说工作正常。
这是一个已知问题,我知道禁用它不是正确的解决方法。但我会一直使用它,直到 intellij 发布针对此问题的官方修复程序。
正如其他答案指出的那样,问题可能来自许多不同的来源。
就我而言,是 Subversion 插件难以与服务器通信并使 IDE 挂起在索引上。
我运行正在使用 Arch Linux、i7-5930k 6 核 CPU 和 64GB DDR4 RAM,并且我正在使用 IntelliJ IDEA 14.
IDEA 几天前对我来说工作得很好,但有一天,突然,在 "Indexing" 阶段打开一个项目后,它开始挂起。我没有更新 IDEA,我的项目没有任何变化。 IDE 的 UI 在打开项目后挂起,"Indexing" 完成的进度条只有一小部分。每隔 5-10 分钟左右它就会解冻,进度条会向前爬一点,然后 IDE 会再次冻结几分钟。这种情况在 15 分钟到一个小时之间的任何地方重复发生,直到它最终完成索引,此时它又挂起 5-10 分钟什么都不做,然后它最终解锁并允许我开发。
发生这种情况时,我的系统反应迟钝 - Firefox 选项卡需要很长时间才能切换,并且在其中滚动很慢。打开新终端 window 需要很长时间。切换 windows 一般需要一段时间。在 htop
中,我的一个 CPU 核心以 100% 加载,而其余的核心负载正常,并且使用了大约 6GB 的 RAM(此系统空闲时负载相当正常。)
我尝试过但没有帮助的事情:
- 删除缓存文件夹
- 删除整个 ~/.IntelliJIDEA14 文件夹
- 重新安装 IntelliJ 包
- 从 JetBrains 的站点手动下载 IntelliJ 并从我的下载文件夹运行下载它(查看 Arch AUR 包是否有问题)
- 将 IntelliJ 配置为使用我的系统 JVM 和 Maven 而不是其嵌入式工具进行导入
- 打开多个不同的项目(不仅仅是我最初遇到问题的项目。)
这个问题确实影响了我的工作流程,如果有人对此有任何解决方案,我将不胜感激。
我终于想通了。解决方案是......相当奇怪。 TL;DR:运行 它在 strace
之下。继续阅读以获得更详细的解释。
当我决定 运行 IntelliJ 在 strace
下查看它打开了哪些文件以确定它是否是文件系统瓶颈时,我遇到了它。
这给了我一些非常奇怪的结果:strace
喷出近乎恒定的段错误流。不仅如此,IntelliJ 还 运行ning 很好,不需要永远索引。
在咨询了朋友之后,我了解到在 Arch Linux 上,systemd 会在每次发生段错误时记录进程内存的转储,附加调试器时除外. strace
被认为是调试器。由于所有段错误,Arch 在不断记录内存转储时正在抖动我的磁盘,这就是为什么索引需要这么长时间,因为它正在争夺磁盘 I/O.
我现在的解决方案是 运行 strace
下的 IntelliJ。但是,我会进一步研究这个问题,因为我认为 java
不应该出现那么多的段错误。
过去在某些 Scala 项目中遇到过同样的问题。我已经安装了 IDEA 16 EAP (https://confluence.jetbrains.com/display/IDEADEV/IDEA+16+EAP),问题已经解决了。
编辑 Intellij[VERSION]/bin/idea.properties,
设置 idea.max.intellisense.filesize=50
更新: 如果您有许多库或许多大文件(一行太多字符或太多行)
,Intellij 将跳过大小大于 50kb.try 的索引文件尝试Invalidating the cache and restarting IntelliJ。
在文件菜单中,select使缓存无效/重新启动...然后单击无效并重新启动按钮。
我在 Mac OS X 上的 2016.2 版也遇到了这个问题。我不得不强制退出以结束应用程序,然后我删除了 .idea 文件夹。下次我启动 IntelliJ 时一切正常,索引项目也没有问题。
Select 帮助 -> 调试日志设置...
添加以下行(注意前导 # 符号)
#com.intellij.util.indexing:trace
重新启动 IDE(不需要使缓存失效,因为这会导致它从头开始,而从故障点重新启动,无论如何,对我来说,一旦我报告了问题文件重新启动):
Scheduling indexing of file://C:/dev/tools/ruby/lib/ruby/2.2.0/x64-mingw32/win32ole.so by request of index Stubs
我们的项目不使用 win32ole,所以我将文件移动到安全位置并重新启动我的 IDE...宾果游戏,问题消失了,在有效使用 intellij 将近 1 年之后终于完成了索引比记事本 ruby 编辑器稍微聪明一点。
我在使用 IntelliJ 2017.3.2 时遇到了同样的问题。当我单击索引进度条时,我注意到它挂在我的构建目录中的一个目录中。当我执行删除该目录的 gradlew clean 时,索引就可以继续了。
我遇到过这个问题,并解决了:
- 删除想法
- 删除我电脑中所有名为'jetbrain'和'IntelliJ'的文件和目录(Mac mini )
- 然后安装idea
我也试过只删除idea缓存文件,不行。
在我的例子中,我发现 Intellij 实际上试图用项目根目录下的日志索引一个 50GB 的目录。确保如果您有这样的目录,它在 IDE.
中被标记为 "Excluded"您可以在索引状态 window 中查看 IDE 当前正在索引哪个文件(通过单击工具栏中的索引消息访问)。您可能需要放大此 window 以查看当前正在编制索引的文件的完整路径。
在 PhpStorm 中,为我解决这个问题的是从索引中排除我不需要索引的文件夹(特别是供应商文件夹、缓存文件夹和一些包含数千张图像的资产文件夹)。瞬间开始进步并完成。
为此:
- 在项目目录列表中,右键单击要排除的文件夹
- 将目录标记为
- 排除
我通过从项目中删除所有 "target" 文件夹解决了这个问题。
我在最新的 IntelliJ Idea 2019.3 中遇到了类似的问题,所以也许它会有所帮助。对我来说,问题出在其中一个插件 uninstalling/reinstalling 上,清理缓存没有帮助。我的步骤是:
- 杀掉 intellij,重新开始
- 在启动和即将加载项目时,请快速取消打开项目。这样您最终会得到一个小的 window,其中包含以前打开的项目列表和一些菜单项。
- 打开菜单 > 插件,全部禁用
- 重启intellij idea,打开任意项目。
如果上面的第 4 步成功(这发生在我身上),请逐一尝试启用插件以查看是哪个插件导致了错误。对我来说,它是 Kubernetes 来自 JetBrains 的插件。
我在 2019.1.4 遇到了类似的问题。然而,我的会改变目录,有时,最终,完成。如果确实完成了,则在 8-10 分钟范围内。
我到处都是,甚至 JetBrains 的论坛。我通过 Project Structure | Modules
排除了目录。我多次使用 Invalidate Caches And Restart
。我尝试只打开 1 个项目让它完成。我安装并尝试了 2019.2.4 和 2019.3.3(后者会因为其他原因崩溃)。最重要的是,它似乎只发生在一个项目上!
最终让我得到答案的是 Help > Activity Monitor...
我发现 psi.impl.cache.impl.todo
运行 接近 100% CPU 并且没有停止的迹象。
事实证明,我有一个 TODO 过滤器设置,其中的 RegEx 定义不明确。有点像 \b.*wip\b.*
;这个想法是找到我们所有的“WIP”值。好吧,领先的 .*
是一个巨大的错误,直到我花了很多时间指责插件升级后才意识到这一点。我相信这是一个糟糕的过滤器的原因是因为它挂在 ExtJS 中的项目是 JavaScript,这意味着 app.js
文件和诸如此类的东西一式三份...
更新
在 IntelliJ 2020.x 和 2021.x 中,该选项已移至 Help > Diagnostic Tools > Activity Monitor
。
看来进入这个"indexing"地狱可能有几个原因。我花了几个小时尝试使用上面的想法修复它。 在一天结束时,通过一些分析工作,我发现我的案例中的坏人是 csv 插件: https://plugins.jetbrains.com/plugin/10037-csv-plugin
我有几个(不是很大)CSV 文件作为输入,虽然我将它们标记为不被索引,但插件一直在尝试为它们建立索引。 删除插件后,一切正常。
可能在新 window 中同时打开了另一个正在编制索引的项目。
我使用的是 Elm 插件并安装了 elm-bounded-nats 包,其中包含一个半大型源文件。 IntelliJ 一直挂在这个文件上,但并不总是在索引弹出对话框中正确报告(可能是由于线程)。当我在设置 -> 文件类型 ("Nats.elm") 中排除这个特定文件时,索引成功完成。现在编辑器为这个包呈现错误,但编译过程仍然有效。
我运行今天就入了这个问题Mac。它会在我能够进入菜单并使缓存无效之前挂起。
我使用以下命令从命令行删除了缓存,它对我有用。
rm -rf ~/Library/Caches/JetBrains/IntelliJIdea*
之后就没有问题了。
禁用未使用的插件将改进索引。在我的例子中,我已经从 File -> Settings->Plugins
禁用了 Kotlin 插件如果您检查 intellij 日志(可以在 C:\Users
java.lang.RuntimeException: java.io.EOFException
at com.intellij.util.ExceptionUtilRt.rethrow(ExceptionUtilRt.java:31)
at com.intellij.util.ExceptionUtil.rethrow(ExceptionUtil.java:120)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.handleError(FSRecords.java:516)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$DbConnection.access[=10=]0(FSRecords.java:153)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords.writeAndHandleErrors(FSRecords.java:965)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords.access0(FSRecords.java:47)
at com.intellij.openapi.vfs.newvfs.persistent.FSRecords$AttributeOutputStream.close(FSRecords.java:1629)
at kotlin.io.CloseableKt.closeFinally(Closeable.kt:53)
at org.jetbrains.kotlin.idea.caches.FileAttributeServiceImpl.write(FileAttributeServiceImpl.kt:64)
at org.jetbrains.kotlin.idea.caches.FileAttributeServiceImpl.writeBooleanAttribute(FileAttributeServiceImpl.kt:48)
at org.jetbrains.kotlin.idea.caches.IDEKotlinBinaryClassCache.getKotlinBinaryClass(IDEKotlinBinaryClassCache.kt:67)
at org.jetbrains.kotlin.idea.caches.IDEKotlinBinaryClassCache.getKotlinBinaryClassHeaderData(IDEKotlinBinaryClassCache.kt:8
在 IntelliJ 2021.3 Ultimate 上无效缓存和重启对我不起作用。 我很想知道 2021.3 Ultimate 版本的新 Repair IDE 功能是否可以解决我 mac.
上的这个问题- 启动时,IntelliJ 在索引时冻结
- 强制退出并重新启动 IntelliJ
- 在启动时,从底部的状态栏手动“暂停”索引
- 缓存无效并重新启动
- 索引时仍然冻结
- 强制退出并重新启动 IntelliJ
- 启动时重复步骤 #2
- 从文件菜单,执行修复IDE,并完成修复步骤
- 已修复;不再冻结索引
- 退出 IntelliJ 并重新启动
- 没有索引问题
我也遇到了 intellij 2021.3 的冻结问题。早些时候我使用的是 intellij 2021.1 版本并且工作正常但是自从我将 intellij 版本升级到 2021.3 它开始冻结文件索引。
此线程中有人建议使用 修复 IDE 功能修复 ide。但这对我不起作用。
因此,我浏览了 intellij 日志文件夹中可用的线程转储。分析日志后,我发现调用 Package Search 插件被阻塞。因此,我在设置 -> 插件中禁用了该插件。为此,我不得不暂时在开始时暂停索引。禁用此插件后,它对我来说工作正常。
这是一个已知问题,我知道禁用它不是正确的解决方法。但我会一直使用它,直到 intellij 发布针对此问题的官方修复程序。
正如其他答案指出的那样,问题可能来自许多不同的来源。
就我而言,是 Subversion 插件难以与服务器通信并使 IDE 挂起在索引上。