美文网首页Java 杂谈Java开发那些事
说说 JVM 的堆转储文件以及获取方式

说说 JVM 的堆转储文件以及获取方式

作者: deniro | 来源:发表于2019-08-17 16:33 被阅读38次

JVM 的堆转储文件(heap dump)是某个时间点、Java 进程的内存快照。包含了当时内存中还没有被 full GC 回收的对象和类信息。

1 文件内容

堆转储文件包含以下内容:

  1. 所有对象 - 对象所对应的类、字段、原生数据类型以及引用。
  2. 所有类 - Classloader、类名、超类以及静态字段。
  3. 垃圾回收器的根 - Java 垃圾回收就是使用它,进行可达性分析,从而判定一个对象是否可以被回收。
  4. 线程堆栈与本地变量。

因为堆转储文件没有保存共享信息,所以找不到对象创建者信息。

2 自动生成模式

我们可以在 JVM 中配置 -XX:+HeapDumpOnOutOfMemoryError,这样在发生内存溢出异常(OutOfMemoryError)时,就会在工作目录中,自动生成堆转储文件。

3 手动生成模式

3.1 jmap 命令

jmap -dump:format=b,file=<filename.hprof> <pid>
  • 其中的 format=b,表示转储为二进制格式。
  • file 指定转储文件的路径,后缀为 hprof。
  • pid 表示进程 ID。

在 windows cmd 中,可以使用命令 tasklist 来查看进程 ID。

3.2 jconsole 控制台

Jconsole (Java Monitoring and Management Console),是 JDK 自带的监控 、管理工具 。

首先双击 ${JDK_HOME}/bin/jconsole.exe,打开进程连接列表,选择我们需要 dump 的进程:

默认是使用 SSL,本地一般不会用到,所以这里直接选择 “不安全的连接”:

连接成功后,就会进入监控概览:

依次选择 MBean → com.sun.management 下 HostSpotDiagnosic 中的 dumpHeap,在 p0 中输入 hprof 文件的导出路径,这样就可以生成堆转储文件啦:

3.3 Eclipse Memory Analyzer

也可以使用 Eclipse Memory Analyzer,直接从进程中生成堆转储文件。打开 Memory Analyzer,点击右上角的 File → Acquire Heap Dump,这时就会打开本地进程列表,我们选择想要 dump 的进程,并指定好堆存储路径:

点击 Next ,就会进入 Heap Dump Provider 参数配置页,在此我们可以配置导出的类型、是否只导出活跃对象、是否压缩以及制定导出路径参数:


个人更喜欢 jmap 命令,简单、清晰。

相关文章

  • 说说 JVM 的堆转储文件以及获取方式

    JVM 的堆转储文件(heap dump)是某个时间点、Java 进程的内存快照。包含了当时内存中还没有被 ful...

  • jmap-各种option参数说明

    基本情况 jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它...

  • 获取堆转储dump文件的方式

    1、获取内存详情:jmap -dump:format=b,file=e.bin pidpid代表进程号,e.bin...

  • 堆转储文件分析

    生成转储文件: 使用 -XX:+HeapDumpOnOutOfMemoryError 参数 结果: 分析: 使用 ...

  • 获取JVM的堆文件

    获取JVM的dump文件的两种方式: 1. JVM启动时增加两个参数: #出现 OOME 时生成堆 dump:-X...

  • Java堆转储Dump文件的几种方法

    在本文中,我们将展示用Java捕获堆转储的不同方法。 堆转储是JVM内存中某一时刻所有对象的快照。它们对于解决内存...

  • Java堆转储Dump文件的几种方法

    在本文中,我们将展示用Java捕获堆转储的不同方法。 堆转储是JVM内存中某一时刻所有对象的快照。它们对于解决内存...

  • 使用MAT解析OOM问题

    对于排查OOM问题、分析程序堆内存使用情况,最好的方式就是分析堆转储。 堆转储,包含了堆现场全貌和线程栈信息(Ja...

  • 2018-11-02

    heap dump 概念:堆转储文件,是一个Java进程在某个时间点上的内存快照; 作用:获取如下信息 对象信息:...

  • Android | App内存优化 之 全面理解MAT

    本文以上一篇博客《Android | App内存优化 之 内存泄漏 要点概述 以及 解决实战》获得的堆转储文件为例...

网友评论

    本文标题:说说 JVM 的堆转储文件以及获取方式

    本文链接:https://www.haomeiwen.com/subject/gytksctx.html