一 背景
项目上线后出现jvm内存过高的情况,并且运行一段时间后会出现内存溢出。
二 分析
上一篇我们通过将内存快照导入visualvm来查看具体的内存情况,但是遗憾的是并没有发现具体的问题,于是这次选择使用MAT工具来定位问题
- MAT简介
memory analyzer是一个java监控分析工具,作为跨平台的开源工具,您不仅可以用它来分析内存问题,也可以用来监控整个 Java 应用程序的状态和行为。通过读取应用程序运行时由 Java 运行时环境生成的转储文件快照,Memory Analyzer 使您能够分析那些调试代码可能无法发现的复杂问题。
- 安装MAT
下载链接
https://www.eclipse.org/downloads/ 其实他有两种方式一个是直接下载安装包,一个是直接在eclipse中安装插件,由于我没有安装eclipse所以就直接下载了这个安装包,但是出现一个问题,网站只提供最新版本的安装包,没有以前版本,但是最新版本要求运行环境最低是java11,而我本地环境是java8,所以无法运行
所以我又下载了我本机支持的其他版本的MAT。有需要可联系我
下载好不需要安装直接点击直接可以运行 - 启动并装入快照文件
![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ac5162435f1549d9bcc46d3866f94827~tplv-k3u1fbpfcp-watermark.image)
![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/401ea08431d0420ea601e7c8bd5c946d~tplv-k3u1fbpfcp-watermark.image)
MAT直接帮助我们分析出可能发生内存泄漏的点,查看第一个
![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9541ad93ee3d430993c95ac4290f769d~tplv-k3u1fbpfcp-watermark.image)
这里有两个参数
Shallow Heap 以及 Retained Head,Shallow Heap就是对象本身的内存,Retained Head为对象及其引用所占用内存的总和