当前位置:首页 > Java

如何抓取java dump

2026-03-22 19:27:37Java

获取 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:

  1. 启动 JVisualVM:执行 jvisualvm 命令
  2. 在左侧进程列表中选择目标 Java 进程
  3. 右键点击进程,选择 "Heap Dump" 选项
  4. 生成的 Heap Dump 会显示在右侧,可以保存到本地

使用 JConsole 工具

JConsole 也是 JDK 自带的监控工具,可以通过以下步骤获取 Heap Dump:

  1. 启动 JConsole:执行 jconsole 命令
  2. 连接到目标 Java 进程
  3. 切换到 "内存" 标签页
  4. 点击 "执行 GC" 按钮旁边的 "Heap Dump" 按钮

使用 Eclipse MAT 工具

Eclipse Memory Analyzer Tool (MAT) 不仅可以分析 Heap Dump,也能直接获取:

  1. 启动 MAT
  2. 选择 "File" > "Acquire Heap Dump"
  3. 选择本地运行的 Java 进程
  4. 指定保存路径获取 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:

如何抓取java dump

heapdump /path/to/dump.hprof

注意事项

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

标签: javadump
分享给朋友:

相关文章

如何打开java

如何打开java

打开 Java 程序的方法 通过命令行运行 Java 程序 确保已安装 Java Development Kit (JDK) 并配置环境变量。使用 javac 编译 .java 文件,生成 .clas…

如何编写java

如何编写java

编写Java程序的基本步骤 安装Java开发工具包(JDK),确保系统环境变量配置正确。可以从Oracle官网下载最新版本的JDK并进行安装。 选择一个合适的集成开发环境(IDE),如Eclipse…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…

java如何避免死锁

java如何避免死锁

避免死锁的方法 固定顺序获取锁 确保所有线程按照相同的顺序获取多个锁。例如,若需要获取锁A和锁B,所有线程必须先获取A再获取B,避免交叉依赖导致的死锁。这种方式破坏了“循环等待”条件。 使用锁超时机…

java如何调试

java如何调试

调试Java程序的基本方法 使用IDE内置的调试工具(如IntelliJ IDEA或Eclipse)是最常见的方式。在代码行号旁点击设置断点,启动调试模式后,程序会在断点处暂停,允许查看变量值、调用栈…

eclipse如何创建java

eclipse如何创建java

在Eclipse中创建Java项目 打开Eclipse后,选择菜单栏中的"File" -> "New" -> "Java Project"。在弹出的对话框中输入项目名称,确保"Use de…