如何抓取java dump
获取 Java Heap Dump 的方法
使用 jmap 工具生成 Heap Dump。jmap 是 JDK 自带的命令行工具,适用于运行中的 Java 进程。
jmap -dump:format=b,file=/path/to/dump.hprof <pid>
其中 <pid> 是目标 Java 进程的进程 ID,可以通过 jps 命令查看。
通过 JVM 参数触发 OOM 时自动生成
在启动 Java 应用时添加以下 JVM 参数,当发生 OutOfMemoryError 时自动生成 Heap Dump:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof
使用 JVisualVM 工具
JVisualVM 是 JDK 自带的图形化监控工具,可以通过界面操作获取 Heap Dump:
- 启动 JVisualVM:执行
jvisualvm命令 - 在左侧进程列表中选择目标 Java 进程
- 右键点击进程,选择 "Heap Dump" 选项
- 生成的 Heap Dump 会显示在右侧,可以保存到本地
使用 JConsole 工具
JConsole 也是 JDK 自带的监控工具,可以通过以下步骤获取 Heap Dump:
- 启动 JConsole:执行
jconsole命令 - 连接到目标 Java 进程
- 切换到 "内存" 标签页
- 点击 "执行 GC" 按钮旁边的 "Heap Dump" 按钮
使用 Eclipse MAT 工具
Eclipse Memory Analyzer Tool (MAT) 不仅可以分析 Heap Dump,也能直接获取:
- 启动 MAT
- 选择 "File" > "Acquire Heap Dump"
- 选择本地运行的 Java 进程
- 指定保存路径获取 Heap Dump
通过 JMX 接口获取
对于启用了 JMX 的 Java 应用,可以通过编程方式获取 Heap Dump:
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import com.sun.management.HotSpotDiagnosticMXBean;
public class HeapDumper {
public static void dumpHeap(String filePath, boolean live) throws Exception {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
HotSpotDiagnosticMXBean mxbean = ManagementFactory.newPlatformMXBeanProxy(
mbsc, "com.sun.management:type=HotSpotDiagnostic", HotSpotDiagnosticMXBean.class);
mxbean.dumpHeap(filePath, live);
}
}
使用 Arthas 工具
Arthas 是阿里开源的 Java 诊断工具,可以通过以下命令获取 Heap Dump:

heapdump /path/to/dump.hprof
注意事项
- Heap Dump 文件可能很大,确保磁盘有足够空间
- 生产环境获取 Heap Dump 可能导致应用短暂停顿
- 建议在低峰期执行 Heap Dump 操作
- 分析大型 Heap Dump 需要足够的内存,建议使用专业工具如 Eclipse MAT






