拓展阅读
JVM FULL GC 生产问题 II-如何定位内存泄露? 线程通用实现
JVM FULL GC 生产问题 III-多线程执行队列的封装实现,进一步抽象
jvm-44-jvm 内存性能分析工具 Eclipse Memory Analyzer Tool (MAT) / 内存分析器 (MAT)
jvm-45-jvm dump 文件内存介绍+获取方式+堆内存可视分析化工具
jvm-46-jvm Thread Dump 线程的堆栈跟踪信息+获取方式+可视分析化工具 FastThread
jvm-47-jvm GC 垃圾回收日志+获取方式+可视分析化工具 gcviewer
场景
JVM DUMP 文件应该如何分析?
MAT 是什么?
Eclipse Memory Analyzer Tool (MAT) 是一个强大的 Java 堆内存分析工具,常用于分析 Java 内存转储(heap dump),帮助开发者找到内存泄漏、检查大对象等问题。以下是对 MAT 的详细介绍,包括其核心功能、使用场景以及分析步骤。
1. MAT 的核心功能
- 查找内存泄漏:MAT 通过分析 heap dump,可以帮助发现潜在的内存泄漏点,特别是无法被垃圾回收的对象。
- 识别大对象:MAT 可以快速识别占用大量内存的对象及其引用路径,帮助优化应用程序的内存使用。
- 分析对象保留集:通过计算每个对象的保留大小(retained size),MAT 可以帮助确定哪些对象或对象树最为消耗内存。
- 生成报告:MAT 可以自动生成问题分析报告,给出可能的内存泄漏或对象过大等问题的总结,并提供详细的建议。
2. 常见使用场景
- 内存泄漏排查:在应用程序出现 OutOfMemoryError 错误或内存消耗异常时,MAT 是分析堆转储、查找泄漏原因的利器。
- 优化内存使用:MAT 能帮助你识别内存使用的热点对象,帮助改进代码以减少内存消耗。
- 分析应用的生命周期内存模式:了解应用程序的内存分配情况,帮助开发者优化对象的生命周期管理,避免内存问题。
- 调试内存泄漏测试:在模拟压力测试或性能测试时,可以生成 heap dump 并使用 MAT 来确定内存使用的瓶颈。
下载
2024 年 5 月 8 日,Memory Analyzer 迁移至 Github
Memory Analyzer 的代码库已从 Eclipse Git 服务器迁移至 Github:https://github.com/eclipse-mat/mat。
MAT vs JVisualVM
个人比较喜欢实用 mat,非常直观强大。
功能 | MAT | JVisualVM |
---|---|---|
实时监控 | 不支持实时监控,只分析堆转储 | 支持实时监控 JVM 性能,包括 CPU、内存、线程、GC 活动等 |
堆转储分析 | 强大的堆转储分析能力,支持深入分析 | 支持堆转储分析,但功能不如 MAT 详细 |
内存泄漏检测 | 自动生成内存泄漏嫌疑报告,提供深入的保留集分析 | 提供基础的内存泄漏分析 |
线程分析 | 不支持线程分析 | 支持实时线程分析和线程 dump |
GC 分析 | 不支持 GC 分析 | 提供基本的 GC 活动监控 |
对象引用链分析 | 支持详细的对象引用链分析、保留大小等 | 提供基本的对象引用分析 |
OQL 查询 | 支持 OQL(Object Query Language) | 不支持 OQL |
性能调优 | 不适合性能调优,专注于内存分析 | 支持实时性能调优 |