炼数成金 门户 大数据 Java 查看内容

MAT入门到精通(二)

2019-2-18 14:54| 发布者: 炼数成金_小数| 查看: 32593| 评论: 0|原作者: 阿杜的世界|来自: dqVoice

摘要: 使用MAT打开一个heap dump文件,解析完成后,默认会进入欢迎页,欢迎页里包含了一些常见的分析:最大内存占用分析、常见的分析动作、常用的分析报告、MAT使用教程等等。

Python SQL Java Hadoop 培训

03、MAT的欢迎页
使用MAT打开一个heap dump文件,解析完成后,默认会进入欢迎页,欢迎页里包含了一些常见的分析:较大内存占用分析、常见的分析动作、常用的分析报告、MAT使用教程等等。

我们看下下面这张图,可以看出MAT的主要结构和功能:

透视图(inspector):用于展示一个对象的详细信息,例如内存地址、加载器名称、包名、对象名称、对象所属的类的父类、对象所属的类的加载器对象、该对象的堆内存大小和保留大小,gc root信息。inspector窗口的下半部分是展示类的静态属性和值、对象的实例属性和值、对象所属的类的继承结构。
Heap Dump History:用于列举最近分析过的文件
常用功能栏:从左到右依次是:概览、类直方图、支配树、OQL查询、线程视图、报告相关、详细功能。其中概览就是在刚解析完后展示的这个页面,详细功能按钮则是提供了一些更细致的分析能力。
概览中的饼图:该饼图用于展示retained size较大的对象
常用的分析动作:类直方图、支配树、按照类和包路径获取消耗资源最多的对象、重名类。
常见问题:Leak Suspects用于查找内存泄漏问题,Top Components负责分析占用堆内存超过整个堆内存1%大小的组件。
Components Report:这个功能是一组功能的集合,用于分析某一类性的类的实例的问题,例如分析Java.util.*开头的类的实例对象的一些使用情况,例如:重复字符串、空集合、集合的使用率、软引用的统计、finalizer的统计、Map集合的碰撞率等等。

04、MAT的基本功能
关于概览页面,我们再上一节已经进行过分析,这里不再赘述。我们在这一小节,将重点放在功能栏那一栏,即类直方图、支配树、OQL查询、线程视图等功能。

4.1类直方图
堆直方图是从类的角度看哪些类及该类的实例对象占用着内存情况,默认是按照某个类的shallow heap大小从大到小排序。

Retained Heap这一列的值是空的,因为对于某个类的所有实例计算总的retained heap非常慢,因此使用者需要按需计算。

在直方图页面,可以选择某个条目右键进行分析,例如对所有类的对象做一些分析动作。

在直方图页面,还有一个重要的特性——可以选择一些其他维度进行分类分析,例如superclass、class loader、package。

如果选择按照package来分类,则可以看到下面这种视图


4.2支配树
支配树可以用于查看heap dump中占用内存较大的对象。在支配树中,对于某一层的节点来说,如果它们的parent节点没有被其他对象引用了,那么这写节点都会被垃圾收集器回收。

支配树可以用来排查是哪些对象导致了其他对象无法被垃圾收集器回收,跟类直方图类似,支配树也从类加载器、package等角度来看。

4.3OQL(对象查询语言)
MAT提供另一种类似SQL的对象查询语言——OQL,可以用类似SQL语句的方式查询heap dump中的对象。OQL和关系型数据库具备类似的数据模型:将某个类看作是一张表,将该类的实例对象看作是该表中的行,每个对象中的属性看作是构成行的列。

OQL语言的语法结构如下:
SELECT *
FROM [ INSTANCEOF ] <class name="name">
[ WHERE <filter-expression> ]
</filter-expression></class>

OQL编辑器分为两个区域:
上半部分的区域用于输入查询语句
下半部分的区域用于展示查询语句执行的结果
下图是查询当前堆里所有的String对象的语句和结果:


4.4线程视图


通过上图中的那个按钮,可以查看线程视图,线程视图首先给出了在生成快照那个时刻,JVM中的Java线程对象列表。这个按钮的功能,等同于下图中的这个操作:

在线程视图这个表中,可以看到以下几个信息:线程对象的名字、线程名、线程对象占用的堆内存大小、线程对象的保留堆内存大小、线程的上下文加载器、是否为守护线程。

选中某个线程对象展开,可以看到线程的调用栈和每个栈的局部变量,通过查看线程的调用栈和局部变量的内存大小,可以找到在哪个调用栈里分配了大量的内存。

因此,heap dump和MAT不仅仅用于排查内存相关的问题,也有助于排查线程相关的问题。

4.5问题分析

上图中的这个按钮,是MAT提供的一些常见的问题分析能力。因为这些问题特别常见,所以MAT就提供了对应的组合功能,帮用户快速定位常见问题。

Heap Dump OverviewHeap Dump Overview就是整个堆的概括情况,例如:堆内存大小、对象个数、类的个数、类加载器的个数、GC root的个数、堆内存文件的格式、文件的创建时间、位置等信息。这个页面还开一个看一些系统属性、线程概览、Top内存耗费组件、类直方图等信息。

Leak Suspects如下图所示,这个功能用于排查潜在的内存泄漏问题。

Top Components针对那些占用堆内存超过整个堆内存1%大小的组件做一系列的分析,例如:Top Consumers、保留集合、潜在的内存浪费问题等其他问题。

这一系列的分析,有很多层次,可以用下面这张思维导图理解:


4.6对象查找
MAT支持根据对象的十六进制地址查找对象的outbound引用视图,如下图所示:

这个功能等同于在直方图中选中某个对象,然后右键列举该对象的outbound引用视图:


声明:文章收集于网络,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2019-7-23 11:05 , Processed in 0.177273 second(s), 24 queries .