验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

怎么使用MAT进行JVM内存分析

阅读:1116 来源:乙速云 作者:代码code

怎么使用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

      • 通过OOM获取,即在OutOfMemoryError后获取一份HPROF二进制Heap Dump文件,可以在jvm里添加参数:

      • 通过OOM获取,即在OutOfMemoryError后获取一份HPROF二进制Heap Dump文件,可以在jvm里添加参数:

      • -XX:+HeapDumpOnOutOfMemoryError

      • 主动获取,即在虚拟机添加参数如下,然后在Ctrl+Break组合键即可获取一份Heap Dump

      • -XX:+HeapDumpOnCtrlBreak

      • 使用HPROF agent

      • 使用Agent可以在程序执行结束时或受到SIGOUT信号时生成Dump文件。配置在虚拟机的参数如下:

      • -agentlib:hprof=heap=dump,format=b

      • jmap 可以在cmd里执行,命令如下:

      • jmap -dump:format=b file=<文件名XX.hprof>

      • 使用JConsole

      分析实战

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

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

      怎么使用MAT进行JVM内存分析

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

      怎么使用MAT进行JVM内存分析

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

      怎么使用MAT进行JVM内存分析

      怎么使用MAT进行JVM内存分析

      怎么使用MAT进行JVM内存分析

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

      怎么使用MAT进行JVM内存分析

      怎么使用MAT进行JVM内存分析

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>