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

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

一 背景

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

二 分析

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

  1. MAT简介

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

  2. 安装MAT

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

    image.png

  3. 启动并装入快照文件
![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为对象及其引用所占用内存的总和
相关文章
|
存储 网络虚拟化 索引
【OSTEP】分页(Paging) | 页表中究竟有什么 | 页表存在哪 | 内存追踪
【OSTEP】分页(Paging) | 页表中究竟有什么 | 页表存在哪 | 内存追踪
392 0
|
8月前
|
Ubuntu 架构师 Linux
内存泄露专题(5)动态内存追踪大杀器:bcc
内存泄露专题(5)动态内存追踪大杀器:bcc
193 0
|
8月前
|
架构师 Unix Linux
内存泄露专题(4)mtrace内存追踪
内存泄露专题(4)mtrace内存追踪
194 0
|
存储 Java 容器
记录一次内存泄漏追踪(一)
记录一次内存泄漏追踪(一)
|
2月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
531 1
|
1月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
2月前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
2月前
|
Java
JVM运行时数据区(内存结构)
1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧 (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一 (3)程序计数器:保存指令执行的地址,方便线程切回后能继续执行代码
31 3
|
2月前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
64 1
|
2月前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。