用途:在正在运行的 IntelliJ 进程内回答“IDE 当前在做什么”,用于排查卡顿、高 CPU、阻塞线程和协程问题。仅针对实时 IDE 进程证据;若需诊断任意问题、查看仓库代码、分析构建/测试输出或调试 MCP 服务器本身,应改用相应的调试、测试或代码调查流程。
可用性:除非 IDE 以 -Didea.diagnostics.mcp.enabled=true 启动,否则诊断工具集不可见。若 get_ide_diagnostics 不可用,应告知用户需用该属性重启 IDE;不要与 MCP 服务器自诊断混淆。
使用方式:先做轻量 CPU 采样,不包含原始转储,参数如 sampleMillis 1000、topThreadCount 25、includeRawDump false。针对卡顿、阻塞线程或协程调查,可请求有界原始转储,参数如 sampleMillis 1000、topThreadCount 50、includeRawDump true、maxDumpChars 200000、stripCoroutineDump true。针对特定操作性能问题,在操作前或操作中采样一次,在症状可见时再采样一次,比较两次的 topCpuThreads、blockedCountDelta、waitedCountDelta 和 threads.stateCounts。
结果解读:process.processCpuLoad 与 process.systemCpuLoad 是时间点进程/系统 CPU 负载,-1 表示 JVM 无法提供。topCpuThreads[].cpuDeltaNanos 按采样期间 CPU 消耗排序线程,-1 表示线程 CPU 时间不可用。state 是 JVM Thread.State,RUNNABLE 包含 Java 执行和本地调用(含本地 I/O)。isInNative、nativeFrame、nativeOperationHint 有助于识别本地调用,但不是操作系统等待通道数据。stackTrace 是用于归因的短栈快照,不是完整分析器调用树。threads.stateCounts 可用于发现大量 BLOCKED、WAITING 或 TIMED_WAITING 线程。rawDump 是 IntelliJ 线程转储文本,若运行中的 IDE 启用协程转储,可能包含协程转储内容。rawDumpTruncated=true 表示需用更大的 maxDumpChars 重试,或先请求更窄的下一步,再根据缺失尾部内容下结论。coroutineDumpEnabled=false 表示工具无法提供普通线程栈之外的协程转储细节。
升级:该 MCP 工具适合低开销分诊和证据收集。若需根因 CPU 归因、分配压力、锁分析、本地等待状态归因或长时间记录,应改用 JFR、async-profiler 或 IDE 标准性能捕获流程。