You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置可使用Profiler的Kotlin项目遇JVM分析报错,寻求解决方法

配置支持CPU/内存分析的Kotlin项目(解决直接启动Profiler测单元测试报错问题)

核心问题定位

你的场景里,直接启动Profiler运行单元测试失败,但先启动测试再附加Profiler正常,结合环境和报错,问题主要出在Gradle测试任务与IntelliJ Profiler的启动参数冲突、JVM工具链配置的兼容性上。

具体修复方案

1. 调整Gradle测试配置,规避参数冲突

你之前移除kotlin { jvmToolchain(17) }后能正常运行,说明该配置与Profiler启动参数存在兼容性问题。可以保留JVM版本指定,但改用Gradle测试任务参数配置,同时排除可能干扰Profiler的参数:

tasks.test {
    // 指定JVM版本,替代jvmToolchain配置
    jvmArgs = listOf(
        "--add-opens=java.base/java.lang=ALL-UNNAMED",
        "--add-opens=java.base/java.io=ALL-UNNAMED"
    )
    // 禁止Gradle自动添加可能干扰Profiler的系统属性
    systemProperties["java.awt.headless"] = true
    // 移除可能与Profiler冲突的JVM参数
    jvmArgs.removeIf { it.startsWith("-XX:") && it.contains("Profiler") }
}

2. 修复IntelliJ Profiler直接启动报错

针对Failed to generate a profiler dump: check that the JVM supports profiling报错:

  • 打开IntelliJ的Run/Debug Configurations,找到目标单元测试配置
  • 切换到Profiler标签页,取消勾选Use JVM args for profiling,手动添加Profiler基础参数:
    -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints
    
  • 执行./gradlew --stop终止所有后台Gradle Daemon,避免进程卡住后重新启动Profiler

3. 修复Async Profiler文件格式报错

针对Invalid file format: No readable chunks in recording报错:

  • 确保使用IntelliJ 2022.2.5内置的Async Profiler(版本为2.9.x,与当前IDE兼容)
  • 在测试配置的Profiler标签页选择Async Profiler后,调整录制设置:
    • 取消勾选Lock Java threads
    • 将Sampling interval调整为10ms,避免采样过频导致文件损坏
    • 启动测试前,点击Profiler面板的垃圾桶图标清空旧录制缓存

4. 优化"先启动测试再附加Profiler"的流程

既然该方式能正常运行,可通过以下步骤提升效率:

  • 在单元测试配置的JVM参数中添加:-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005,让测试启动后暂停等待Profiler附加
  • 启动测试后,直接点击IntelliJ右上角的Attach Profiler按钮选择对应类型,无需手动等待测试运行

关键注意事项

  • 不要添加-XX:+UnlockCommercialFeatures参数:OpenJDK 17已移除该参数,会导致Gradle Daemon启动失败
  • Kotlin 1.8.22与IntelliJ 2022.2.5兼容,无需强制升级IDE
  • Windows环境下,确保IntelliJ以管理员权限运行,避免Profiler无法获取JVM进程权限

内容的提问来源于stack exchange,提问作者Anonsage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:43:36