前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM故障分析及性能优化实战(VI)——JVM Heap Dump(堆转储文件)的生成和MAT的使用

JVM故障分析及性能优化实战(VI)——JVM Heap Dump(堆转储文件)的生成和MAT的使用

作者头像
IT技术小咖
发布2019-09-29 15:36:03
3.4K0
发布2019-09-29 15:36:03
举报
文章被收录于专栏:码上修行码上修行

JVM Heap Dump(堆转储文件)的生成

正如Thread Dump文件记录了当时JVM中线程运行的情况一样,Heap Dump记录了JVM中堆内存运行的情况。 可以通过以下几种方式生成Heap Dump文件:

使用 jmap 命令生成

jmap [https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html] 命令是JDK提供的用于生成堆内存信息的工具,可以执行下面的命令生成Heap Dump:

代码语言:javascript
复制
jmap -dump:live,format=b,file=heap-dump.bin <pid>

其中的pid是JVM进程的id(可以通过jps命令获取pid),heap-dump.bin是生成的文件名称,在执行命令的目录下面。推荐此种方法。

使用 JConsole 生成

JConsole是JDK提供的一个基于GUI查看JVM系统信息的工具,既可以管理本地的JVM,也可以管理远程的JVM,可以通过下图的 dumpHeap 按钮生成 Heap Dump文件。

在JVM中增加参数生成

在JVM的配置参数中可以添加 -XX:+HeapDumpOnOutOfMemoryError 参数,当应用抛出 OutOfMemoryError 时自动生成dump文件; 在JVM的配置参数中添加 -Xrunhprof:head=site 参数,会生成java.hprof.txt 文件,不过这样会影响JVM的运行效率,不建议在生产环境中使用(未亲测)。

常见的Heap Dump文件分析工具

JVM Heap Dump文件可以使用常用的分析工具如下:

jhat

jhat [https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jhat.html] 是JDK自带的用于分析JVM Heap Dump文件的工具,使用下面的命令可以将堆文件的分析结果以HTML网页的形式进行展示:

代码语言:javascript
复制
jhat <heap-dump-file>

其中 heap-dump-file 是文件的路径和文件名,可以使用 -J-Xmx512m 参数设置命令的内存大小。执行成功之后显示如下结果:

Snapshot resolved. Started HTTP server on port 7000 Server is ready.

这个时候访问 http://localhost:7000/ 就可以看到结果了。

Eclipse Memory Analyzer(MAT)

Eclipse Memory Analyzer(MAT) [https://www.eclipse.org/mat/] 是Eclipse提供的一款用于Heap Dump文件的工具,操作简单明了,下面将详细进行介绍。

IBM Heap Analyzer

IBM Heap Analyzer [https://www.ibm.com/developerworks/community/alphaworks/tech/heapanalyzer] 是IBM公司推出的一款用于分析Heap Dump信息的工具,下载之后是一个jar文件,执行结果如下:

Memory Analyzer的安装和使用

如前文所述,Eclipse Memory Analyzer(简称MAT)是一个功能丰富且操作简单的JVM Heap Dump分析工具,可以用来辅助发现内存泄漏减少内存占用。 使用 Memory Analyzer 来分析生产环境的 Java 堆转储文件,可以从数以百万计的对象中快速计算出对象的 Retained Size,查看是谁在阻止垃圾回收,并自动生成一个 Leak Suspect(内存泄露可疑点)报表。

下载与安装

Eclipse Memory Analyzer(MAT)支持两种安装方式,一是Eclipse插件的方式,另外一个就是独立运行的方式,建议使用独立运行的方式。 在 http://www.eclipse.org/mat/downloads.php 下载安装MAT,启动之后打开 File - Open Heap Dump... 菜单,然后选择生成的Heap DUmp文件,选择 "Leak Suspects Report",然后点击 "Finish" 按钮。

主界面

第一次打开因为需要分析dump文件,所以需要等待一段时间进行分析,分析完成之后dump文件目录下面的文件信息如下:

上图中 heap-27311.bin 文件是原始的Heap Dump文件,zip文件是生成的html形式的报告文件。

打开之后,主界面如下所示:

接下来介绍界面中常用到的功能:

Overview

Overview视图,即概要界面,显示了概要的信息,并展示了MAT常用的一些功能。

  • Details 显示了一些统计信息,包括整个堆内存的大小、类(Class)的数量、对象(Object)的数量、类加载器(Class Loader)的数量。
  • Biggest Objects by Retained Size 使用饼图的方式直观地显示了在JVM堆内存中最大的几个对象,当光标移到饼图上的时候会在左边Inspector和Attributes窗口中显示详细的信息。
  • Actions 这里显示了几种常用到的操作,算是功能的快捷方式,包括 Histogram、Dominator Tree、Top Consumers、Duplicate Classes,具体的含义和用法见下面;
  • Reports 列出了常用的报告信息,包括 Leak Suspects和Top Components,具体的含义和内容见下;
  • Step By Step 以向导的方式引导使用功能。

Histogram

直方图,可以查看每个类的实例(即对象)的数量和大小。

Dominator Tree

支配树,列出Heap Dump中处于活跃状态中的最大的几个对象,默认按 retained size进行排序,因此很容易找到占用内存最多的对象。

OQL

MAT提供了一个对象查询语言(OQL),跟SQL语言类似,将类当作表、对象当作记录行、成员变量当作表中的字段。通过OQL可以方便快捷的查询一些需要的信息,是一个非常有用的工具。

Thread Overview

此工具可以查看生成Heap Dump文件的时候线程的运行情况,用于线程的分析。

Run Expert System Test

可以查看分析完成的HTML形式的报告,也可以打开已经产生的分析报告文件,子菜单项如下图所示:

常用的主要有Leak Suspects和Top Components两种报告:

  • Leak Suspects 可以说是非常常用的报告了,该报告分析了 Heap Dump并尝试找出内存泄漏点,最后在生成的报告中对检测到的可疑点做了详细的说明;
  • Top Components 列出占用总堆内存超过1%的对象。

Open Query Browser

提供了在分析过程中用到的工具,通常都集成在了右键菜单中,在后面具体举例分析的时候会做详细的说明。如下图:

这里仅针对在 Overview 界面中的 Acations中列出的两项进行说明:

  • Top Consumers 按类、类加载器和包分别进行查询,并以饼图的方式列出最大的几个对象。菜单打开方式如下:
  • Duplicate Classes 列出被加载多次的类,结果按类加载器进行分组,目标是加载同一个类多次被类加载器加载。使用该工具很容易找到部署应用的时候使用了同一个库的多个版本。菜单打开方式如下图:

Find Object by address

通过十六进制的地址查找对应的对象,见下图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码上修行 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JVM Heap Dump(堆转储文件)的生成
    • 使用 jmap 命令生成
      • 使用 JConsole 生成
        • 在JVM中增加参数生成
        • 常见的Heap Dump文件分析工具
          • jhat
            • Eclipse Memory Analyzer(MAT)
              • IBM Heap Analyzer
              • Memory Analyzer的安装和使用
                • 下载与安装
                  • 主界面
                  相关产品与服务
                  腾讯云 BI
                  腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档