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

为何GraalVM原生镜像中HotSpotDiagnosticMXBean为空,无法设置OOM堆转储?

问题原因及解决办法

核心原因

  • GraalVM原生镜像基于Substrate VM运行时,不是HotSpot虚拟机,你代码里用的HotSpotDiagnosticMXBean是HotSpot专属的管理Bean,Substrate VM根本不提供这个组件,所以获取实例时返回null。
  • 原生镜像是AOT提前编译的产物,运行时环境和HotSpot的JVM完全不同,很多HotSpot特有的JMX Bean都不存在。

替代方案

要在GraalVM原生镜像中实现OOM时自动生成堆转储,不需要用HotSpot的API,直接用GraalVM原生镜像专属的参数即可:

  1. 构建时配置:在执行mvn clean -Pnative native:compile时,添加原生镜像参数:
    mvn clean -Pnative native:compile -Dnative-image.args="-H:+HeapDumpOnOutOfMemoryError -H:HeapDumpPath=./heapdump.hprof"
    
  2. 运行时配置:如果已经构建好原生可执行文件,运行时直接指定参数:
    ./your-native-app -H:+HeapDumpOnOutOfMemoryError -H:HeapDumpPath=./heapdump.hprof
    

补充说明

如果你的代码还依赖其他JMX功能,需要在构建原生镜像时显式启用JMX代理,添加参数-H:+EnableJMXAgent,但即使启用,也无法获取HotSpot特有的MBean,因为Substrate VM没有实现这些组件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:10:54