当前位置:首页 > 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:

如何抓取java 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:

如何抓取java 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:

heapdump /path/to/dump.hprof

注意事项

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

标签: javadump
分享给朋友:

相关文章

java如何安装

java如何安装

安装Java的步骤 下载Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK项目页面下载适合操作系统的JDK版本。Oracle JDK适用于商业用途,OpenJDK是开源版本。选择…

java如何编程

java如何编程

Java编程基础 Java是一种面向对象的编程语言,广泛应用于企业级开发、移动应用(Android)等领域。以下是Java编程的核心步骤和示例。 环境搭建 安装JDK 从Oracle官网下载适合…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…

java如何输出数组

java如何输出数组

输出数组的方法 在Java中,输出数组内容有多种方式,具体取决于数组类型和输出格式需求。以下是几种常见的方法: 使用Arrays.toString()方法 适用于一维数组,直接调用Arrays.to…

java如何创建数组

java如何创建数组

创建数组的基本方法 在Java中,数组是固定大小的同类型元素集合。创建数组需要声明数组类型并初始化。 声明数组 语法格式为 数据类型[] 数组名 或 数据类型 数组名[]: int[] arr1;…

java如何获取当前时间

java如何获取当前时间

获取当前时间的方法 在Java中,可以通过多种方式获取当前时间。以下是几种常见的方法: 使用 java.util.Date Date currentDate = new Date(); Syste…