状态:待上报 Qoder 团队
记录时间:2026-09-24
严重级别:高(持续占满多核 CPU,影响 IDE 可用性)
在 IntelliJ IDEA 中使用 Qoder 插件时,IDEA 主进程 CPU 持续占用 118%~130%(多核累加),
风扇狂转、界面卡顿。经线程采样定位,根因为 Qoder 插件的加载动画 GIF(spinner)对应的
Swing ImageIcon 动画线程未被释放,导致多个 Image Animator 线程在 GIF 逐帧解码上无限循环。
该问题与索引、编译、数据库查询、代码规模均无关,是插件侧的资源泄漏 Bug。
| 项目 | 值 |
|---|---|
| 操作系统 | macOS 15.7.7(Intel) |
| CPU / 内存 | Intel i7-9750H / 16GB |
| IDE | IntelliJ IDEA 2026.1 |
| 插件 | Qoder JetBrains 插件,版本 2026.923.x(build 75360054) |
| 运行形态 | Qoder 以 JetBrains 插件形式运行在 IDEA 进程内(PID 68914) |
Image Animator 0 的线程同时运行。$ ps -Ao pid,%cpu,%mem,comm -r | head
PID %CPU %MEM COMM
68914 124.2 16.2 /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
$ sample 68914 3 -mayDie | grep -cE "Java: Image Animator"
6
6 个线程全部命中 GIF 解码函数:
947 Thread_5413337: Java: Image Animator 0
947 Thread_5413651: Java: Image Animator 0
947 Thread_5413670: Java: Image Animator 0
947 Thread_5413679: Java: Image Animator 0
947 Thread_5413688: Java: Image Animator 0
947 Thread_5413715: Java: Image Animator 0
947 Thread_5413337: Java: Image Animator 0
+ 519 JVM_SleepNanos -> JavaThread::sleep_nanos -> PlatformEvent::park_nanos # 帧间 sleep(GIF 帧延时)
+ 338 Java_sun_awt_image_GifImageDecoder_parseImage (in libawt.dylib) # 逐帧解码 GIF
+ jni_CallIntMethod -> JavaCalls::call_helper ...
+ jni_GetPrimitiveArrayCritical / jni_ReleasePrimitiveArrayCritical
栈呈现典型的 sleep(帧延时) → parseImage(解码下一帧) → sleep → ... 循环特征,
即 sun.awt.image.GifImageDecoder 在按 GIF 帧率无限循环解码,线程永不退出。
ImageIcon(gif) 播放动图。ImageIcon 的 GIF 动画由 AWT 的 Image Animator 线程驱动,会按帧率持续 sleep + decode 循环。Image.flush() / 未移除 ImageObserver / 未 dispose),线程发生泄漏。说明:JDK 8 的 AWT GIF 动画实现(
GifImageDecoder)本身即为"只要 ImageObserver 存在就一直循环"的模型,
因此释放责任在插件侧——必须在不再需要动画时主动停止。
2026.923.x。Image Animator 线程数随操作累积增加,且关闭会话后不回收。sample <idea-pid> 3 | grep "Image Animator" 可复现线程泄漏。removeNotify() / dispose() 时,imageIcon.getImage().flush(),并清空 ImageObserver 引用)。ImageIcon。javax.swing.Timer 驱动的多帧 PNG 序列或矢量绘制,Image Animator 线程泄漏;或改用 JCEF/HTML 动画。Image Animator 线程数超过阈值时告警,便于回归验证。# 1. 找到 IDEA 进程
ps -Ao pid,%cpu,comm -r | grep -i idea | head
# 2. 统计 Image Animator 泄漏线程数(替换 <PID>)
sample <PID> 3 -mayDie | grep -cE "Java: Image Animator"
# 3. 查看线程栈确认卡在 GIF 解码
sample <PID> 3 -mayDie | grep -A3 "Image Animator"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这报告写得真硬核,简直是教科书级的Bug排查。没点底层功底真写不出来,从ps采样到JNI调用栈,把GifImageDecoder的锅扒得明明白白。Qoder团队要是看到这估计得连夜修,毕竟这种资源泄漏太致命了。
不过说真的,咱们用户遇到这种“CPU狂转、风扇起飞”的bug确实搞心态,IDE都卡得没法用了。
建议赶紧把这份文档甩给他们官方反馈,标题就按你改的那个来,清晰有力。
顺便提醒一句,重启IDE虽然能暂时救急,但别指望它能自动恢复,不重启线程永远在那儿空转。
希望他们这次能重视,早点出补丁,不然Credits烧完还得搭进去电脑寿命。
官方详细解决方案:https://help.aliyun.com/zh/lingma/changelogs-jetbrains
Qoder CN 是 Qoder CN 系列中面向软件开发场景的核心子产品(原“通义灵码”),提供 IDE、JetBrains 插件、Visual Studio Code 插件等多种使用形态。Qoder CN 持续提供代码智能生成、智能问答、多文件修改、编程智能体等能力,并在模型选择、专家协作、任务规划等方向全面升级,为开发者带来高效、流畅的编码体验。同时面向企业客户提供企业标准版、企业专属版,具备企业级场景自定义、私域知识增强等能力,助力企业研发智能化升级。