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

相关推荐
Maynor99631 分钟前
OpenClaw 玩家必备:用 AI 自动追踪社区最新动态
java·服务器·人工智能
堕27435 分钟前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法
亓才孓1 小时前
[Class的应用]获取类的信息
java·开发语言
开开心心就好1 小时前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
80530单词突击赢1 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
爬山算法1 小时前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
云姜.2 小时前
线程和进程的关系
java·linux·jvm
是码龙不是码农2 小时前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
曹牧2 小时前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言
heartbeat..2 小时前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范