http://just2do.iteye.com/admin/blogs/2181293 之前写过一篇使用java自带工具去分析内存泄露问题,今天使用 Memory Analysis重做一次,看看高级工具是否能一针见血地更方便地发现问题。
第一步:
jmap -dump:format b,file=abc.hprof <pid>
dump出内存日志
第二部:
使用Memory Analysis打开abc.hpro
从上图可以看到,泄露内存部分占用了快500M了。而整个应用也就分配了500M。
从直方图可以看到,前五位对象已经占用了快300M的内存。所以我们焦点放在这里,去排查内存泄露点。
从上图可以看到,9个线程对象很平均地占用了50M左右的内存。那我们随机取一个NIO线程对象出来分析。
从上图可知,一个线程只占用极小内存,但是它却引用了非常大量的其他对象,而且不能释放掉。
这些对象,最终是被本地线程变量MAP所引用。
在直方图上,我们 选择第一条,右键“list objects”下选择“with incoming references”
从下图可知,这些对象都是被一些业务数据bean所引用
在直方图上,我们 选择第一条,“Path to GC Roots”->"exclude weak references"
从垃圾回收路径看到,本地线程变量所保存的数据,最终还是由gson类所引用业务数据。
到这里,我们就可以针对所有使用gson的地方进行排查了。
总结:通过两种不同方法对同一个内存泄露现象进行分析,我们可以看到,其实使用java自带工具进行分析,完全能够快速定位问题所在,因为特征信息很明显。特别是对系统比较熟悉的情况下,完全可以出奇制胜,一步到位。使用MAT,我们可以更直观和看到更丰富的信息。甚至丰富到影响你的排查。:)
在当前这个案例来看,MAT并不能体现出多大的优势。但如果泄露特征信息不明显的情况下,MAT还是具有很强大的树状内存追踪能力的。
内存泄露分析,难点在于没有统一、固定的分析解决方法,全靠的是经验、分析能力、对系统的熟悉和感觉!
相关推荐
1、基于netty+websocket+springboot的实时聊天系统项目源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料...
springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot...
springboot+netty+websocket+redis 分布式聊天,实现简单的聊天功能
Netty+Spring Boot仿微信 全栈开发高性能后台及客户端
基于springboot+netty+vue构建的类似bililbili的弹幕群聊系统,个人娱乐项目,可用于前后端开发学习研究 基于springboot+netty+vue构建的类似bililbili的弹幕群聊系统,个人娱乐项目,可用于前后端开发学习研究 ...
绍如何搭建一个准实时聊天问答程序,包括微信小程序和H5网页版。 该项目服务端主要使用了Java + Spring Boot + Netty + WebSocket等技术栈,聊天客户端使用的是UniApp来轻松搭建微信小程序和H5网页端。
毕设项目:基于netty+websocket+springboot的实时聊天系统 毕设项目:基于netty+websocket+springboot的实时聊天系统 毕设项目:基于netty+websocket+springboot的实时聊天系统 毕设项目:基于netty+websocket+...
netty案例,netty4.1中级拓展篇六《SpringBoot+Netty+Elasticsearch收集日志信息数据存储》源码 ...
netty+4G DTU
基于springcloud+Netty+MQ+mysql的分布式即时聊天系统.zip基于springcloud+Netty+MQ+mysql的分布式即时聊天系统.zip基于springcloud+Netty+MQ+mysql的分布式即时聊天系统.zip基于springcloud+Netty+MQ+mysql的分布式...
omen-1.1 自己基于netty开发的服务端,支持spring配置服务器启动模式:http,tcp,websocket等,并支持NIO和OIO方式,项目已应用于生产,可以通过jar形式加入其它项目,业务类...个人原创,部分代码参考网上其他文献。
Spring+Netty+WebSocket实例,通用性还行,比较贴近生产,注释什么写的比较全
springboot+netty+mybatis+sqlserver,socket,整合sqlserver2014和bean的注入问题,springboot的异步加载bean
netty+websocket通讯例子
(nginx+redis+zookeeper+activemq+storm+dubbo+netty+jvm+并发编程锁+项目实战)
netty,kafka,storm 整合jdbc,存入数据库!!!
Netty+3.1中文用户手册 描述netty的使用
实现netty作为服务端,websocket连接成功,将channel保存到map集合,通过js发送心跳,服务端接收心跳信息并响应给客户端,当服务端断开时 客户端进行重连操作