常用的dump文件分析工具

Laughing
2025-04-16 / 0 评论 / 10 阅读 / 搜一下 / 正在检测是否收录...

当系统发生内存溢出时,我们一般的处理方式都是通过抓取内存堆转储快照的形式进行分析,本文我们介绍几种日常常用的dump文件分析工具。

准备工作

我们通过-XX:+HeapDumpOnOutOfMemoryError参数让虚拟机在出现内存溢出时Dump出当前的内存堆转储快照,然后对Dump出的文件进行分析。

示例代码如下

import java.util.ArrayList;
import java.util.List;

public class HeapDump {

    static class HeapDumpObject {

    }

    public static void main(String[] args) {

        List<HeapDumpObject> heapDumpObjectList = new ArrayList<>();
        while (true) {
            heapDumpObjectList.add(new HeapDumpObject());
        }

    }
}

我们通过命令运行程序

javac HeapDump.java
  
java -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError HeapDump

m9k07u6x.png

此时程序会在程序运行目录下生成.hprof格式的dump文件,我们可以针对此文件进行分析,查找内存泄漏对象的引用路径,并定位到代码具体位置。

工具一:JVisualVM

JVisualVM是JDK自带的dump,目前在JDK中已经没有预置此工具了,我们可以通过 官网进行下载。

m9k1p6q8.png

点击左上角,可以加载我们的dump文件

m9k1reht.png

可以切换摘要、线程等页签,查看不同的跟踪信息。

工具二:IntelliJ Idea自带的分析器

m9k0l1ec.png

依次打开【视图】-【工具窗口】- 【分析器】

m9k0mjle.png

点击【打开快照】,选择我们上方生成的.hprof文件

m9k0pwkm.png

可以分析最大对象以及定位我们异常发生的位置。

工具三:MAT

MAT全称Memory Analyzer,是eclipse出品的一款独立的内存分析工具,可以在 官网下载。

打开软件后,选择[Open a Heap Dump]

m9k2ftaq.png

可以查看对象占用空间等信息,也可以定位具体代码位置
m9k35kn7.png

工具三:JProfiler

JProfiler 是一款强大的性能分析工具,能够深入分析 Java 应用程序的 CPU 使用情况、内存消耗、线程状态和数据库查询,从而帮助快速定位性能瓶颈。

打开JProfiler后,点击左上角【会话】-【打开快照】,可以选择我们本地的dump文件。

m9l41vft.png

双击占用最大的类,然后引用选择【传入引用】

m9l42qgy.png

在【引用】页签,选择点击【显示更多】,可以查看异常代码的位置。

0

评论 (0)

取消