MAT(memory analyzer tool)主要功能

MAT(Memory Analyzer Tool),是一款快速便捷且功能强大丰富的JVM堆内存离线分析工具。其通过展现JVM异常时所记录的运行时堆转储快照(heap dump)状态(正常运行时也可以做堆转储分析),帮助定位内存泄漏问题或优化大内存消耗逻辑。

MAT主要适用场景:

  1. 内存溢出, JVM堆区放不下存活及待申请的对象。如:高峰期系统出现OOM异常,需定位内存瓶颈点来指导优化。

  2. 内存泄漏,不会再使用的对象无法被垃圾回收器回收。如:系统运行一段时间后出现Full GC,直到周期性OOM,最终需人工重启解决。

  3. 内存占用高,内存占用高,影响服务实时性、稳定性、吞吐能力。

  4. CPU高,频繁GC引起CPU极高。

  5. 业务对象分析,比如会话数量分析、大对象分析、循环过多分析等等。

Heap Dump

Heap Dump是Java进程堆内存再一个时间点的快照,通常情况下,快照会包含关于堆中Java对象和类的信息,这些信息是再生成快照时的,所以堆是具有时效性,不同时刻获取的堆内容一般不相同,主要内容如下:

  1. 所有对象的实例信息:对象所属类名、基础类型和引用类型的属性等;

  2. 所有类信息:类加载器、类名、继承关系、静态属性等;

  3. GC Roots:GC Roots代表通过可达性分析来判断JVM对象是否存活的起始集合;

  4. 线程栈及局部变量:快照生成时刻的所有线程的线程栈帧,以及每个线程栈的局部变量。

Shallow Heap

Shallow Heap代表一个对象结构自身所占用的内存大小,如java.util.ArrayList对象的Shallow Heap包含8字节的对象头、8字节的对象数组属性elementData引用、4字节的size属性、4字节的modcount属性,Shallow Heap又叫浅堆。

Retained Set

对象retained set,是指该对象被GC回收后,所有能被回收的对象集合;另外,当该对象无法被GC回收,则其retained set也必须无法被GC回收。

Retained Heap

Retained Heap是一个对象被GC回收后,可释放的内存大小,等于释放对象的Retained Set中所有对象的Shallow Heap的和,Retained Heap又叫深堆。

Dominator Tree

如果所有指向对象Y的路径都经过对象X,则X支配Y。 Dominator Tree是根据对象引用及支配关系生成的整体树状图,支配树清晰描述了对象间的依赖关系,如下图,左边是引用关系,右边是支配树。

OQL

OQL是类似于SQL的MAT专用统一语言,可以根据复杂的查询条件对dump文件中的类或者对象等数据进行筛选。

References

包含outgoing references、incoming references,均反映了对象间直接依赖关系。

  1. outgoing references:对象引用的外部对象(注意不包含对象的基本类型属性)

  2. incoming references:直接引用了当前对象的对象,每个对象的incoming references可能有1到多个。

MAT通用设置

mat自身默认内存为1024M,

mat的默认文件结构

MemoryAnalyzer.ini文件

MAT的主要功能

(1)全局信息

(2)统计Histogram

(3)支配树

(4)OQL查询

(5)线程信息

(6)堆预览、泄漏分析、大对象分析、报告分析

(7)引用关系、GC Roots、Java基础、Java集合等等。

相关推荐
猫头虎14 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
wgslucky14 小时前
jdk17 配置jvm参数中gc的日志及控制日志数量和大小
jvm·gc·-xlog
痴儿哈哈19 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
野犬寒鸦1 天前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
闻哥1 天前
Kafka高吞吐量核心揭秘:四大技术架构深度解析
java·jvm·面试·kafka·rabbitmq·springboot
星辰_mya1 天前
Elasticsearch线上问题之慢查询
java·开发语言·jvm
蓝帆傲亦1 天前
代码革命!我用Claude Code 3个月完成1年工作量,这些实战经验全给你
jvm·数据库·oracle
Codiggerworld2 天前
JVM内存模型——你的对象住在哪里?
jvm
马猴烧酒.2 天前
【面试八股|JVM虚拟机】JVM虚拟机常考面试题详解
jvm·面试·职场和发展
2301_790300962 天前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python