最近被 Android Studio 越来越卡的问题给绷住了,明明用的不多,大多数只是打开在后台放着,偶尔需要才过去做一些手动修改,但是经常是要用的是就发现这玩意变得贼卡,明明内存也没吃满,这就很奇葩了,干脆把它的日志丢给 AI 分析了下,结果发现:
大概率是 Copilot 插件和 Jetbrains AI 插件导致,虽然现在我很久没用它们了。
首先通过日志可以发现,Copilot 和 JetBrains AI 都不是我用了才工作,而是两个插件自己就一直就在工作,不过这两玩意活跃的方式还不大一样:
- 就算没任务,Copilot 也像是在不断参与编辑器 UI 状态刷新、维护语言服务和文件监听
- JetBrains AI 是在持续做额度、激活状态、账号/许可证、配置拉取这类后台任务
日志可以显示"它们一直在活动",就算我没怎么去用它。
比如 Copilot ,主要就有 3 类日志:
检查栏/状态栏刷新
最明显的日志就是这一类:
bash
ActionUpdater - 468 ms to grab EDT for InspectionWidgetContentExclusionAction#presentation@EditorInspectionsToolbar (com.github.copilot.status.InspectionWidgetContentExclusionAction)
WARN - ActionUpdater - 3230 ms total to grab EDT 4 times to expand EditorMarkupModelImpl$StatusToolbarGroup#expandGroup@EditorInspectionsToolbar
WARN - ActionUpdater - 9817 ms total to grab EDT 5 times to expand ToolWindowHeader$2#expandGroup@ToolwindowTitle
这类记录反复出现,而且不是几次,是大量重复, 几千次,这些调用很多次都要抢 EDT,也就是 UI 主线程,然后它一直在工作,也就直观导致了 "我没干什么,但 IDE 还是越来越黏" 的情况,从日志上看:
com.github.copilot.status.InspectionWidgetContentExclusionAction是 Copilot 在编辑器检查工具栏上的一个动作- ActionUpdater 在刷新工具栏按钮、状态项时,会去调用它
- 也就是可以这么理解,就算你没主动用 Copilot 聊天,它也在"参与编辑器当前状态的判断"
而且 freeze dump 里主线程 AWT-EventQueue-0 也是提示卡在:
arduino
com.intellij.openapi.actionSystem.impl.ActionUpdater
com.intellij.util.containers.FList.get
另外 Copilot 还有一个维护自己的语言服务进程 ,这也是导致卡顿的元凶之一,在 freeze dump 里能看到:
arduino
"BaseDataReader: output stream of copilot-language-server.exe" "BaseDataReader: error stream of copilot-language-server.exe" "copilot-language-server.exe"
另外就是 Copilot 维护文件监听器和项目级资源,在日志里还有这类内容:
bash
com.github.copilot.mcp.service.McpFileListenerService$startWatchingConfigFile... com.github.copilot.copilotInstructions.service.CopilotInstructionsFileListenerService$startWatchingConfigFile...
在关闭项目时还有:
arduino
ProjectCloseListener - Cleaning up session ID for closed project: ... File watcher stopped during disposal
也就是它有项目级 session 生命周期管理,即使不用,但是项目开多了,就会有越多 session 监听环境和项目状态变化 。
另外一个是 JetBrains AI 这这边 ,就算你不用,它也是一直在工作,最典型的是这些周期性检查 quota / 配额 / refill 状态:
sql
QuotaManager2Impl - Updating quota refill state QuotaManager2Impl - Quota update requested QuotaManager2Impl - New quota state is: Available(...) QuotaManager2Impl - Quota info is ... trying to update it every 6 minutes
还有大量这种重复错误:
vbnet
New quota refill state is: Error(exception=com.intellij.ml.llm.core.quota.ResultDoesNotMatchConditionException...)
这里最关键的还不是错误本身,而是"它一直在重试",从时间上看,很多记录是按固定间隔不断出现的:
- 09:45:31
- 09:46:03
- 09:46:35
- 09:47:07
- 09:47:39
- 09:48:11
另外插件也会一直维护 AI 激活、许可证、账号、配置状态,在 freeze dump 里能看到很多 com.intellij.ml.llm 的活跃协程和状态对象,比如:
kotlin
com.intellij.ml.llm.activation.state.impl.AiaActivationManagerImpl com.intellij.ml.llm.matterhorn.activation.state.junie.data.IdeLicenseStore com.intellij.ml.llm.matterhorn.activation.state.junie.data.JbaUserStore com.intellij.ml.llm.matterhorn.activation.state.junie.data.AieProvisionStore
还有:
com.intellij.ml.llm.core.chat.services.AIAssistantServiceApplicationScope com.intellij.ml.llm.core.quota.QuotaManager2Impl
这说明 JetBrains AI 也不只是一个"打开聊天窗口才初始化"的存在,它也是应用级别就有常驻服务,而且这些线程很多显示为 Active。
最夸张的一个日志,.duration 文件内容是 21781 ,也就是约 6 小时,日志显示就是卡在:
swift
"AWT-EventQueue-0" prio=0 tid=0x0 nid=0x0 runnable
java.lang.Thread.State: RUNNABLE
at com.intellij.util.containers.FList.get(FList.java:37)
at com.intellij.util.containers.ContainerUtil$2.get(ContainerUtil.java:389)
at java.base@21.0.10/java.util.AbstractList$Itr.next(Unknown Source)
at com.intellij.openapi.actionSystem.Presentation.doFirePropertyChange(Presentation.java:556)
at com.intellij.openapi.actionSystem.Presentation.fireObjectPropertyChange(Presentation.java:551)
at com.intellij.openapi.actionSystem.Presentation.setIconSupplier(Presentation.java:320)
at com.intellij.openapi.actionSystem.Presentation.copyFrom(Presentation.java:618)
at com.intellij.openapi.actionSystem.Presentation.copyFrom(Presentation.java:593)
at com.intellij.openapi.actionSystem.impl.ActionUpdater.applyPresentationChanges(ActionUpdater.kt:116)
at com.intellij.openapi.actionSystem.impl.ActionUpdater.expandActionGroup$lambda$0(ActionUpdater.kt:253)
at com.intellij.openapi.actionSystem.impl.ActionUpdater$computeOnEdt$deferred$1.invokeSuspend$lambda$0(ActionUpdater.kt:453)
at com.intellij.openapi.application.ActionsKt.runReadAction$lambda$0(actions.kt:25)
at com.intellij.platform.locking.impl.NestedLocksThreadingSupport.runReadAction(NestedLocksThreadingSupport.kt:855)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:1064)
at com.intellij.openapi.actionSystem.impl.ActionUpdater$computeOnEdt$deferred$1.invokeSuspend(ActionUpdater.kt:452)
所以很明细是编辑器检查栏 / 工具栏刷新时,某些插件动作也被一起计算,结果把主线程拖慢了,主线程长期陷在 UI action 更新链路里,导致 Studio 冻结。
所以问题核心在于现在的 AI 插件,它们静默的情况下貌似也在持续工作,甚至不知不觉给你搞出来 freeze ,另外 Gemini 的我没试,但是结论很明显,卸载 JetBrains AI Chat 和 Copilot Plugin ,因为现在都用 Copilot CLI 了,谁还在 Android Studio 里用插件。
自从删了之后,明显 Android Studio 表现好了不少,现在放了两天也没出现越放越卡的情况,所以如果你的 Android Studio 用起来特别卡,而且没怎么用,只是光放着就越放越卡,那么可以尝试把这些没用的插件都卸了,现在的 AI 情况, IDE 用来做 Review 和简单调整也不需要他们了。