IntelliJ IDEA 启动卡顿问题排查与解决

IntelliJ IDEA 启动卡顿问题排查与解决

本文记录了一次 IntelliJ IDEA 2025.2 在 MacBook Pro M3 Pro 上启动卡顿的完整排查过程。

环境信息

项目 配置
设备 MacBook Pro (Mac15,6)
芯片 Apple M3 Pro (11核: 5性能核 + 6效率核)
内存 18 GB
系统 macOS 26.2
IDE IntelliJ IDEA CE 2025.2.6

问题现象

IDEA 启动后出现以下症状:

  • 界面可以打开,但编辑器区域显示加载转圈图标
  • 底部状态栏没有显示索引进度
  • 整个 IDE 无响应,持续卡顿 9+ 秒
  • 系统报告 hang 事件

排查过程

第一步:分析系统 Hang 报告

通过系统生成的错误报告,发现关键信息:

复制代码
Event:            hang
Duration:         9.40s
Footprint:        3041.35 MB  ← 内存占用约 3GB

Heaviest stack (主线程卡在这里):
  GenCollectedHeap::mem_allocate_work  ← 内存分配
  Mutex::lock(Thread*)                  ← 等待 GC 锁
  __psynch_mutexwait                    ← 线程阻塞

初步判断:主线程在进行内存分配时,因 GC 持有锁而阻塞。

第二步:尝试优化 JVM 参数(失败)

尝试了以下优化方案,均导致问题加剧:

尝试 修改内容 结果
方案1 SerialGC → G1GC + AlwaysPreTouch 启动更慢
方案2 仅改 G1GC 仍然卡住
方案3 保持 SerialGC,增加 Xmx 仍然卡住

结论:问题不仅仅是 JVM 参数配置。

第三步:清理缓存(无效)

bash 复制代码
rm -rf ~/Library/Caches/JetBrains/IdeaIC2025.2  # 清理 2.4GB 缓存

清理后重启,问题依旧。

第四步:分析 IDEA 实时日志(找到根因)

查看 ~/Library/Logs/JetBrains/IdeaIC2025.2/idea.log

log 复制代码
# 每 2-3 秒触发一次低内存警告
INFO - LowMemoryWatcher - Low memory signal received: afterGc=false
INFO - LowMemoryWatcher - Low memory signal received: afterGc=false
...

# 通义灵码插件网络超时
INFO - CosyHeartbeatRunner - cosy start ping heart beat
WARN - CosyHeartbeatRunner - cosy ping timeout in heartbeat

发现两个问题

  1. 内存不足 :原配置 -Xmx2048m,但实际使用已超过 3GB
  2. 插件卡顿:阿里云通义灵码 (Cosy) 插件网络请求超时,阻塞主线程

问题根因

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      问题根因分析                            │
├─────────────────────────────────────────────────────────────┤
│  1. 内存配置不足 (Xmx=2GB < 实际需求 3GB+)                   │
│     ↓                                                       │
│  2. 频繁触发 GC (SerialGC 单线程 Stop-The-World)            │
│     ↓                                                       │
│  3. 通义灵码插件在主线程执行网络请求                          │
│     ↓                                                       │
│  4. 网络超时 + GC 阻塞 = IDE 完全卡死                        │
└─────────────────────────────────────────────────────────────┘

解决方案

1. 增加 JVM 内存配置

修改 ~/Library/Application Support/JetBrains/IdeaIC2025.2/idea.vmoptions

diff 复制代码
- -Xms1024m
- -Xmx2048m
+ -Xms2048m
+ -Xmx4096m

完整配置:

复制代码
-Xms2048m
-Xmx4096m
-XX:+UseSerialGC
-XX:ReservedCodeCacheSize=512m
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:+IgnoreUnrecognizedVMOptions
-ea
-Dsun.io.useCanonCaches=false
-Dsun.java2d.metal=true
-Djbr.catch.SIGABRT=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off
-Dapple.awt.application.appearance=system

2. 禁用问题插件

Settings → Plugins → Installed → 搜索 "cosy" 或 "通义灵码" → 禁用

经验总结

排查思路

  1. 先看系统报告:macOS 的 hang 报告提供了卡顿时的线程堆栈
  2. 分析 IDE 日志idea.log 记录了详细的运行时信息
  3. 逐步排除:JVM 参数 → 缓存 → 插件

避坑指南

误区 正确做法
盲目修改 GC 收集器 JetBrains 选用 SerialGC 是经过测试的,不要轻易改动
只看内存占用 需要结合 GC 日志分析是否频繁触发
忽略插件影响 第三方插件可能在主线程执行阻塞操作

推荐配置(18GB RAM 设备)

复制代码
-Xms2048m      # 初始堆 2GB
-Xmx4096m      # 最大堆 4GB(不超过物理内存的 1/4)

相关文件位置

文件 路径
VM 配置 ~/Library/Application Support/JetBrains/IdeaIC2025.2/idea.vmoptions
IDE 日志 ~/Library/Logs/JetBrains/IdeaIC2025.2/idea.log
缓存目录 ~/Library/Caches/JetBrains/IdeaIC2025.2/

排查日期:2026-01-13

相关推荐
人活一口气8 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP9 小时前
Vibe Coding -- 完整项目案例实操
java
荣码10 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing10 小时前
Google第三方授权登录
java·后端·程序员
明月光81810 小时前
从一行 @Builder 说起:重新拾起 Java 的 Lombok、注解与 Builder 模式
java
考虑考虑19 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯20 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路1 天前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
像我这样帅的人丶你还1 天前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev1 天前
GreenDAO → Room
android·java·kotlin