内存溢出————举例分析dump下的hprof文件

本文介绍了一种使用Eclipse Memory Analyzer工具进行内存溢出问题定位的方法。主要包括下载并使用分析工具、解析hprof文件、利用Dominator Tree查找占用内存大的对象、通过Leak Suspects定位可能的内存泄漏点、分析代码及日志来最终确定问题根源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:下载分析工具
内存溢出分析工具:Eclipse Memory Analyzer

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


第二步:开始分析hprof文件


将hprof文件导入Eclipse Memory Analyzer可看到上图:
1.Dominator Tree:可以列出占用内存最大的线程,以及线程下面的那些对象占用的空间

2.Leak Suspects:MA分析出的可能导致内存溢出的地方。


第三步:Dominator Tree分析


Shallow Heap :一个对象所占用的内存,不包含对其他对象的引用
Retained Heap :是shallow Heap的总和(单个对象占用内存*此对象的个数),也就是该对象被GC之后所能回收到内存的总和
分析方式:
1.查找线程下占用内存较大的对象(上图右边)

2.定位对象在代码里出现的位置(上图左边)


第四步:Leak Suspects


查看线程的相关日志,定位导致内存溢出的代码位置


第五步:查看代码,定位变量来源



第六步:查找相关日志,确认问题来源


查找相关日志,定位GC告警前的日志记录
   可以看到接囗的查询参数为6,而后续查询中此变量是模糊查询,所以在查询包裹表时查出了很多数据,
占用了大量内存,导致内存溢出告警
解决方式:因为业务设定就是模糊查询,故对传入参数的长度加以控制。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值