Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JVM第二篇:基于Actuator生成HeapDump及基于MAT分析HeapDump

JVM第二篇:基于Actuator生成HeapDump及基于MAT分析HeapDump

作者头像
黄小怪
发布于 2018-12-27 08:08:35
发布于 2018-12-27 08:08:35
3.9K00
代码可运行
举报
文章被收录于专栏:小怪聊职场小怪聊职场
运行总次数:0
代码可运行

一、使用Spring Boot Actuator生成HeapDump文件

参考我前面的文章Java|使用Spring Boot Actuator监控应用

访问http://localhost:1001/monitor/actuator/heapdump即可生成heapdump文件。

二、安装分析工具MAT

Java程序运行中发生OOM的时候,我们可以使用强大的内存分析工具MAT进行问题跟踪,但由于习惯了使用idea开发,所以安装MAT独立版。

下载地址:https://eclipse.org/mat/downloads.php

MAT Welcome页面

三、生成分析报告

首先,启动前面安装配置好的 Memory Analyzer tool(MAT) , 然后选择菜单项 File- Open Heap Dump 来加载需要分析的堆转储文件。

加载完之后的分析过程如下:

1.选择Leak Suspects Report

选择Leak Suspects Report

2.点击Finish,生成“内存泄露分析报告”

内存泄露分析报告

3.从上面的图,我们查看到内存消耗的整体状况

从上面的“内存泄露分析报告”的饼图上,我们可以清晰地看到一个可疑对象消耗了2.3G的内存,占整个系统的98%以上。

4.继续往下看

内存泄露分析报告下部分

在图的下方还有对这个可疑对象的进一步描述。我们可以看到内存是由

com.lmax.disruptor.RingBuffer的实例消耗的,sun.misc.Launcher$AppClassLoader负责这个对象的加载。

到此,似乎也没找出根本原因(对于新手来说),继续往下看。

5.点击“Details »”,如下图所示

进入Details

我们发现,产生问题的代码段似乎与log4j有一定关系。

6.进一步定位,查看**All Accumulated Objects by Class**里面的内容,如下图

All Accumulated Objects by Class

点击消耗Heap最多的First 10 of 524,168 objects

点击First 10 of 524,168 objects

7.查看**First 10 of 524,168 objects**里的内容,如下图

`First 10 of 524,168 objects

看到这里,我们发现是有一个大对象list存放了大量的aaaaaaaaaaa_aaaaaa的值导致的。

我们通过aaaaaaaaaaa_aaaaaa在代码上进行搜索,最后发现,原来是下面的代码段导致了这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String aa = "aaaaaaaaaaaaaaaaaa_aaaaaaaaa_aaaaaaaaa_aaaaaaaaa_aaaaaaaaa_aaaaaaaaa_";
List<String> list = new  ArrayList();
while (true) {
    list.add(aa);
    log.info("aa:{}", list);
}

到此,我们非常顺利地完成了一次“Java内存泄漏的排查”。实际上有这个顺利吗?回答是也大概差不多。

PS:我在JVM第一篇:一个Java内存泄漏的排查案例文章中说过下面一段话:

2.2 找出导致频繁Full GC的原因 分析方法通常有两种: 1)把堆dump下来再用MAT等工具进行分析,但dump堆要花较长的时间,并且文件巨大,再从服务器上拖回本地导入工具,这个过程有些折腾,不到万不得已最好别这么干。 2)更轻量级的在线分析,使用“Java内存影像工具:jmap”生成堆转储快照(一般称为headdump或dump文件)。

发现使用Spring Boot Actuator可以推翻一下我上面的一点小误解。

感谢你的阅读,如果对你有帮助就点个赞吧,这样的鼓励会让我更有兴趣写《JVM第三篇:******》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.12.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
糟糕,线上OOM了该怎么办,JVM heap dump快速分析
在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件辅助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况,这就是我们常说的dump文件。常用的有heap dump和thread dump(也叫javacore,或java dump)。我们可以这么理解:heap dump记录内存信息的,thread dump记录CPU信息。
架构师修炼
2020/07/20
7K0
糟糕,线上OOM了该怎么办,JVM heap dump快速分析
JVM故障分析及性能优化实战(VI)——JVM Heap Dump(堆转储文件)的生成和MAT的使用
正如Thread Dump文件记录了当时JVM中线程运行的情况一样,Heap Dump记录了JVM中堆内存运行的情况。 可以通过以下几种方式生成Heap Dump文件:
IT技术小咖
2019/09/29
3.8K0
JVM故障分析及性能优化实战(VI)——JVM Heap Dump(堆转储文件)的生成和MAT的使用
MAT工具定位分析Java堆内存泄漏问题方法
MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题。该工具提供了两种使用方式,一种是插件版,可以安装到Eclipse使用,另一种是独立版,可以直接解压使用。
朱季谦
2021/06/29
3.2K0
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出。简单来说,就是你的Java应用想要的内存超过了JVM愿意给的极限,就会抛出这个错误。
程序员江小北
2024/02/24
9030
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
heapdump
通过上一篇 监控和管理生产环境spring boot actuator 我们可以知道可以通过boot集成的actuator插件来监控并管理服务的运行状况,处理由于某种不规范的操作,导致短时间内cpu内存暴增,通过log文件有时很难定位出现问题的环节。遇到这样的问题,除了通知运维同学通过jmap或jcmd指令导出jvm heap dump(堆转存文件)文件快速定位问题以外,如果我们的服务仍然可以正常工作的话,还可以通过actuator为我们提供的jvm heap dump接口来导出jvm heap dump文件。
用户7798898
2022/05/09
1.4K0
heapdump
一次通过dump文件分析OutOfMemoryError异常代码定位过程
OutOfMemoryError是Java程序中常见的异常,通常出现在内存不足时,导致程序无法运行。
codetrend
2024/05/06
4670
一次通过dump文件分析OutOfMemoryError异常代码定位过程
手把手:Java内存泄漏分析Memory Analyzer Tool
点击上方"IT牧场",选择"设为星标"点击上方"IT牧场",选择"设为星标"技术干货每日送达
用户1516716
2019/08/06
13.4K0
手把手:Java内存泄漏分析Memory Analyzer Tool
JVM垃圾回收与一次线上内存泄露问题分析和解决过程
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
猿天地
2020/02/14
1.1K0
JVM垃圾回收与一次线上内存泄露问题分析和解决过程
堆转储文件泄露
一开始通过浏览器访问目标站点,发现网站Icon是一个小绿叶,初步猜测网站使用了Spring Boot框架。然后进行执行器端点路径的枚举,得到以下相关路径:
Naraku
2021/07/29
1.2K0
堆转储文件泄露
JVM-通过MAT工具对dump文件进行分析
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止 了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。 官网地址:https://www.eclipse.org/mat/
共饮一杯无
2022/11/28
2.2K0
JVM-通过MAT工具对dump文件进行分析
jvm系列(七):jvm调优-工具篇
16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化。工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来。 jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具。jdk自带工具一般在jdk bin目录下面,以exe的形
纯洁的微笑
2018/04/19
1.4K0
jvm系列(七):jvm调优-工具篇
JVM 常见线上问题 → CPU 100%、内存泄露 问题排查
  后文会从 Windows、Linux 两个系统来做示例展示,有人会有疑问了:为什么要说 Windows 版的 ? 目前市面上还是有很多 Windows 服务器的,应用于传统行业、政府结构、医疗行业 等等;两个系统下的情况都演示下,有备无患
青石路
2020/10/09
2.8K0
掌握这几点,让你轻松搞定内存泄露、内存溢出!
学会下面这几个方法,让你轻松玩转内存溢出,我们会从 Windows、Linux 两个系统来做示例展示,有人会有疑问了:为什么要说 Windows 版的 ?因为目前市面上还是有很多 Windows 服务器的,应用于传统行业、政府结构、医疗行业等等;两个系统下的情况都演示下,有备无患,
终码一生
2022/04/14
2K0
掌握这几点,让你轻松搞定内存泄露、内存溢出!
Linux如何使用MAT分析dump文件
可用的内存变成0kB了,以前服务是正常的,猜测出现内存泄露。使用Eclipse MAT工具进行分析。
伊泽瑞尔
2022/06/01
4.6K0
Linux如何使用MAT分析dump文件
Eclipse Memory Analyzer(MAT) 使用总结
在日常的开发工作中,遇到生产环境报OOM的问题时,你首先会想到采用哪些方式并使用什么样的工具对OOM问题进行分析,定位和解决呢?
从大数据到人工智能
2022/09/16
5.5K0
Eclipse Memory Analyzer(MAT) 使用总结
获取 Spring heapdump中的密码明文
Actuator是Spring Boot提供的应用系统监控的开源框架。在攻防场景里经常会遇到Actuator配置不当的情况,攻击者可以直接下载heapdump堆转储文件,然后通过一些工具来分析heapdump文件,从而可进一步获取敏感信息。
Bypass
2022/12/01
1.9K0
一次频繁full gc引发的问题排查
刚发布的应用,间隔8小时不到,就开始告警,告警的位置还很特殊,属于调用外组接口的位置,让人费解。
品茗IT
2023/10/22
9500
一次频繁full gc引发的问题排查
Java进行内存泄露​ GC 分析都有哪些常用好用的工具
使用Java语言开发应用程序,虽然JVM帮我们进行了GC收集、清除工作;但是使用不当的话,还是会导致某些对象常驻堆空间无法给垃圾收集器清除,导致内存泄露、内存溢出等情况,今天盘点一下在项目中进行内存泄露分析和GC分析的一些常用、好用的工具。
BUG弄潮儿
2021/01/05
1.3K0
MAT入门到精通(二)
上一篇文章MAT入门到精通(一)介绍了MAT的使用场景和基本概念,这篇文章开始介绍MAT的基本功能,后面还有两篇,一篇是MAT的高级功能,另一篇是MAT实战案例分析。
kirito-moe
2019/05/10
1.7K0
MAT入门到精通(二)
MAT入门到精通(二)
上一篇文章MAT入门到精通(一)介绍了MAT的使用场景和基本概念,这篇文章开始介绍MAT的基本功能,后面还有两篇,一篇是MAT的高级功能,另一篇是MAT实战案例分析。
阿杜
2019/03/04
1.1K0
MAT入门到精通(二)
推荐阅读
相关推荐
糟糕,线上OOM了该怎么办,JVM heap dump快速分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验