IntelliJ使用Java Flight Recorder做性能分析提示找不到jfr文件如何解决
问题根因
你使用的是OpenJ9版本的AdoptOpenJDK 16,这是导致两个分析工具都失效的核心原因:
- Async Profiler本身仅支持HotSpot系虚拟机,不兼容OpenJ9,运行必然报错。
- OpenJ9的JFR实现和HotSpot不通用,IDEA 2021.2版本自动生成的JFR启动参数是针对HotSpot设计的,在OpenJ9上无法触发快照生成逻辑,自然不会输出.jfr文件。
解决方案
方案一:切换为HotSpot版JDK(推荐)
这是兼容性最好、后续不需要额外调整配置的方案:
- 下载Adoptium(原AdoptOpenJDK)的HotSpot版JDK 16或更高版本,替换当前的OpenJ9版本JDK。
- 在IDEA的「项目结构」和对应测试的运行配置中,将JDK指定为新下载的HotSpot版JDK。
- 不需要修改其他Profiler配置,直接重新启动测试的性能分析动作,即可正常生成JFR或Async Profiler快照。
方案二:保留OpenJ9 JDK的调整方法
如果你必须使用OpenJ9版本的JDK,可以手动修改JFR参数适配:
- 打开对应测试的运行配置,找到VM参数输入区域,修改原有JFR相关参数:
替换原有-XX:StartFlightRecording=name="TestName_date_time",settings="default",dumponexit=true,filename="/Users/me/myDirectory/TestName_date_time.jfr"
为OpenJ9适配的参数:-Xdump:system:events=vmstop,file=/Users/me/myDirectory/TestName_date_time.jfr -XX:+FlightRecorder -XX:StartFlightRecording=name=TestName_date_time,settings=default - 注意:OpenJ9不支持Async Profiler,这个是工具原生限制,没有解决方案。
额外检查项
- 确认快照存储目录的读写权限,执行命令
chmod 755 /Users/me/myDirectory确保当前用户有目录的读写权限。 - 可以升级IDEA到2022.1及以上版本,2021.2版本对JDK 16+的性能分析工具存在多个已知兼容Bug,升级后可以避免很多异常问题。
- 如果你的测试运行时长小于1秒,可以在测试代码末尾临时添加1-2秒的等待逻辑,避免进程退出过快,JFR还没来得及写入快照文件。
内容的提问来源于stack exchange,提问作者Itchy。
相关产品推荐
相关产品推荐

