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

如何通过API生成与Hotspot兼容的OpenJ9堆转储文件?

生成OpenJ9兼容Hotspot的hprof堆转储方案

OpenJ9自带的triggerDumpToFile方法生成的是自身格式的堆转储(如.phd、.snap),无法直接产出*.hprof格式文件。要生成能被Hotspot生态分析工具(如VisualVM、JProfiler)识别的堆转储,有两种可行方案:

方案一:使用标准JDK的HotSpotDiagnosticMXBean(OpenJ9原生支持)

OpenJ9实现了标准的com.sun.management.HotSpotDiagnosticMXBean,用法和Hotspot完全一致,生成的*.hprof文件可直接用于兼容分析。

本地进程生成代码:

import com.sun.management.HotSpotDiagnosticMXBean;
import java.lang.management.ManagementFactory;

public class HeapDumpGenerator {
    public static void main(String[] args) throws Exception {
        // 获取诊断Bean实例
        HotSpotDiagnosticMXBean diagnosticBean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
        // 生成hprof堆转储:第一个参数为文件路径,第二个参数true表示仅导出存活对象
        diagnosticBean.dumpHeap("/tmp/my_heap_dump.hprof", true);
    }
}

远程JMX连接生成代码:

如果需要远程触发堆转储,可通过JMX代理实现:

import com.sun.management.HotSpotDiagnosticMXBean;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class RemoteHeapDumpGenerator {
    public static void main(String[] args) throws Exception {
        // 替换为目标机器的JMX服务地址
        JMXServiceURL jmxUrl = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://192.168.1.100:9999/jmxrmi");
        JMXConnector connector = JMXConnectorFactory.connect(jmxUrl);
        MBeanServerConnection serverConn = connector.getMBeanServerConnection();

        // 创建远程MXBean代理
        HotSpotDiagnosticMXBean diagnosticBean = ManagementFactory.newPlatformMXBeanProxy(
                serverConn,
                "com.sun.management:type=HotSpotDiagnostic",
                HotSpotDiagnosticMXBean.class
        );
        // 触发远程堆转储(路径需为目标机器上的有效路径)
        diagnosticBean.dumpHeap("/opt/app/remote_heap_dump.hprof", false);
        
        connector.close();
    }
}

方案二:离线转换OpenJ9原生转储为hprof格式

如果已经通过OpenJ9的API生成了原生堆转储(比如dumpAgent设为heap时生成的.phd文件),可以用OpenJ9自带的dump2hprof工具进行格式转换。该工具随OpenJ9 JDK一同安装,通常位于jdk/bin目录下。

执行命令示例:

dump2hprof -i /path/to/input_dump.phd -o /path/to/output_dump.hprof

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:36:37