【内存泄露排查】应用内存分析方案,采用jmap命令dump内存数据采样后,eclipse mat插件分析
2013-05-08 10:17
676 查看
JVM内存溢出排查实例
问题简介
应用上线一段时间后,出现过两次运行很慢的情况,大约间隔1~2周(中间有小发布会重启应用,不能断定问题出现频率是1~2周),通过jstat –gc pid interval count查看对应的进程,看到FULL GC次数一直增长,初步判断为内存溢出问题。保存现场
使用jmap将内存信息dump出来,语法如下:jmap -dump:format=b,file=heap.hprof pid
分析内存
将dump出来的内存文件heap.hprof拷贝至本机,用Eclipse MAT插件打开。文件较大,第一次打开时需要几分钟进行分析计算,如果出身计算错误,报heap内存不够,此时需要增加eclipse的内存,配置文件位置为eclipse目录下的eclipse.ini文件;导入后的情况如下图所示:查看大对象。点击图示下方的"Top Consumers"查看大对象,如下图所示:
查看具体对象。点击出下图所示的弹出菜单查看具体对象;
可以看到对象为com.ali.kepler.dal.dao.vo.AoneProject
查找源码。从源代码中,找出对AoneProject对象的引用,所有引用中,除了BuildHistoryPrepare之外,其它的引用均是使用了分页参数进行查询,如下图所示:
分析源码。重点分析BuildHistoryPrepare.getAoneProjectByCrid(String crid)方法
这个方法没有对crid进行非空判断,因此当crid为空时,将进行全表扫瞄,而且没有进行分页参数设置,所以最终导致内存泄漏
重现问题
在单元测试历史构建列表页面中,url地址栏键入回车键:
可以看到内存迅速增长,直至内存溢出
解决问题
crid必须加入非空判断;
AoneProjectDaoImpl中查询时,如果没有传入分页参数,加入分页参数;
相关文章推荐
- 使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露
- 使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- Eclipse Memory Analyzer tool(MAT)分析内存泄露1
- 关于内存泄露分析插件 MAT 的用法
- MAT插件分析内存泄露之二
- Eclipse Memory Analyzer tool(MAT)分析内存泄露2
- eclipse内存分析工具MAT Memory Analyzer Tool 插件安装(图解)
- 《JVM故障诊断指南》之5 —— HPROF :使用Eclipse Memory Analyzer 工具 (MAT)进行内存泄露分析
- Eclipse 如何安装和使用 MAT 插件(内存映像分析工具 Eclipse Memory Analyzer)
- ArrayList 与HashSet的比较,及应用反射读取properties配置文件中的数据进行实例化再调用,以及类加载器的使用;还有HashCode的分析,及导致内存泄露,内存溢出的原因之一
- MAT插件分析内存泄露
- 你不知道的Eclipse的用法:使用MAT分析Android的内存
- jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
- jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
- Android应用内存泄露分析、改善经验总结