记录一次内存泄漏追踪(二)

235 阅读1分钟

一 背景

项目上线后出现jvm内存过高的情况,并且运行一段时间后会出现内存溢出。

二 分析

上一篇我们通过将内存快照导入visualvm来查看具体的内存情况,但是遗憾的是并没有发现具体的问题,于是这次选择使用MAT工具来定位问题

  1. MAT简介

    memory analyzer是一个java监控分析工具,作为跨平台的开源工具,您不仅可以用它来分析内存问题,也可以用来监控整个 Java 应用程序的状态和行为。通过读取应用程序运行时由 Java 运行时环境生成的转储文件快照,Memory Analyzer 使您能够分析那些调试代码可能无法发现的复杂问题。

  2. 安装MAT

    下载链接 www.eclipse.org/downloads/ 其实他有两种方式一个是直接下载安装包,一个是直接在eclipse中安装插件,由于我没有安装eclipse所以就直接下载了这个安装包,但是出现一个问题,网站只提供最新版本的安装包,没有以前版本,但是最新版本要求运行环境最低是java11,而我本地环境是java8,所以无法运行 所以我又下载了我本机支持的其他版本的MAT。有需要可联系我 下载好不需要安装直接点击直接可以运行

    image.png

  3. 启动并装入快照文件

    image.png

    image.png

    MAT直接帮助我们分析出可能发生内存泄漏的点,查看第一个

    image.png

    这里有两个参数 Shallow Heap 以及 Retained Head,Shallow Heap就是对象本身的内存,Retained Head为对象及其引用所占用内存的总和