java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MAT进行JVM内存分析

使用MAT进行JVM内存分析实例

作者:@Kong

这篇文章主要介绍了使用MAT进行JVM内存分析实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

背景描述

公司小程序商城项目,服务器为阿里云。

前段时间总是出现服务器CPU报警现象(设置的阈值为95%,CPU使用率大于95%会自动报警)。

通过占用命令查看,迅速锁定当前运行的java进程。

基础知识

MAT简介

Eclipse Memory Analyzer是一个快速且功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。

使用Memory Analyzer分析具有数亿个对象的高效堆转储,快速计算对象的保留大小,查看谁阻止垃圾收集器收集对象,运行报告以自动提取泄漏嫌疑者。

Heap Dump

首先了解下Heap Dump,它也叫堆转储文件,是java进程在某个时间内的快照。

它在触发快照的时候保存了很多信息:java对象和类信息。

通常在写Heap Dump文件前会触发一次Full GC。

获取Dump

分析实战

首先获取dump,jmap -dump:format=b file=<文件名XX.hprof>

使用MAT工具进行日志解析,根据日志的大小不同,解析时间不同。File>Open Heap Dump。

日志分析。可以看出,存在两个较大的问题,每个大约占用1G的空间

查看Problem Suspect 1的详细信息、线程的树结构以及线程对象汇总,发现Member对象有近52万个存活对象

分析线程栈信息,定位问题发生位置,并进行方法优化

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文