`

【原创】一次关于Netty+Gson造成内存泄露 Memory Analysis分析

阅读更多


 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还是具有很强大的树状内存追踪能力的。

 

内存泄露分析,难点在于没有统一、固定的分析解决方法,全靠的是经验、分析能力、对系统的熟悉和感觉!

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 10.8 KB
  • 大小: 27.9 KB
  • 大小: 7.2 KB
  • 大小: 14.6 KB
  • 大小: 15.9 KB
  • 大小: 69.2 KB
  • 大小: 33.8 KB
分享到:
评论

相关推荐

    基于netty+websocket+springboot的实时聊天系统项目源码.zip

    1、基于netty+websocket+springboot的实时聊天系统项目源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料...

    基于springboot+netty+vue构建的类似bililbili的弹幕群聊系统,个人娱乐项目,可用于前后端开发学习研究

    基于springboot+netty+vue构建的类似bililbili的弹幕群聊系统,个人娱乐项目,可用于前后端开发学习研究 基于springboot+netty+vue构建的类似bililbili的弹幕群聊系统,个人娱乐项目,可用于前后端开发学习研究 ...

    springboot-nettysocketio +netty+activeMq在线客服系统

    springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot +netty+activeMq在线客服系统springboot...

    springboot+netty+websocket+redis

    Redis是一款开源的内存数据库,常用于缓存、会话管理和消息队列。在分布式聊天应用中,Redis可以用来存储用户的在线状态、聊天历史记录等实时数据,以减轻后端数据库的压力。Redis的高并发和低延迟特性,对于实时...

    毕设项目:基于netty+websocket+springboot的实时聊天系统.zip

    毕设项目:基于netty+websocket+springboot的实时聊天系统 毕设项目:基于netty+websocket+springboot的实时聊天系统 毕设项目:基于netty+websocket+springboot的实时聊天系统 毕设项目:基于netty+websocket+...

    Netty+Spring Boot仿微信 全栈开发高性能后台及客户端

    Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty的优势在于它的非阻塞I/O模型,这使得它在处理高并发连接时表现出色。它提供了丰富的网络协议支持,如...

    netty案例,netty4.1中级拓展篇六《SpringBoot+Netty+Es信息数据存储》源码

    netty案例,netty4.1中级拓展篇六《SpringBoot+Netty+Elasticsearch收集日志信息数据存储》源码 ...

    基于springcloud+Netty+MQ+mysql的分布式即时聊天系统.zip

    基于springcloud+Netty+MQ+mysql的分布式即时聊天系统.zip基于springcloud+Netty+MQ+mysql的分布式即时聊天系统.zip基于springcloud+Netty+MQ+mysql的分布式即时聊天系统.zip基于springcloud+Netty+MQ+mysql的分布式...

    netty+thrift高并发高性能

    4. **优化的数据结构**:Netty内部使用了高效的数据结构,如ByteBuf来管理内存,避免了频繁的内存复制操作,进一步提高了性能。 #### 三、Thrift 在RPC中的应用 Thrift是由Facebook开发的一款跨语言服务开发框架,...

    netty+spring服务端-omen-1.1

    omen-1.1 自己基于netty开发的服务端,支持spring配置服务器启动模式:http,tcp,websocket等,并支持NIO和OIO方式,项目已应用于生产,可以通过jar形式加入其它项目,业务类...个人原创,部分代码参考网上其他文献。

    netty+kafka+storm

    接下来,Apache Storm是一个实时计算系统,能够持续处理无界数据流,保证每个消息都能得到精确一次的处理。Storm常用于实时大数据分析、在线机器学习等场景。在本案例中,Storm可能会接收到Kafka的数据流,并进行...

    springboot+netty+mybatis+sqlserver

    标题 "springboot+netty+mybatis+sqlserver" 涉及到的是一个使用Spring Boot、Netty、MyBatis以及SQL Server构建的项目。这个项目可能是一个高性能、轻量级的网络通信应用,利用Spring Boot的便利性和Netty的高效...

    spring+netty+mybatis整合实例

    在IT行业中,Spring、Netty和MyBatis是三个非常重要的框架,它们分别在不同的领域发挥着关键作用。Spring是一个全面的Java应用框架,提供强大的依赖注入、AOP(面向切面编程)以及丰富的功能模块;Netty则是一个高...

    基于netty+mqtt3.1.1+springboot+jdk8 实现的 mqtt 服务端跟客户端.zip

    这是一个基于Java技术栈,具体是Netty、MQTT 3.1.1协议、Spring Boot框架和JDK 8实现的MQTT服务器和客户端的项目。这个项目对于学习和实践物联网(IoT)通信以及Java后端开发具有很高的价值,尤其适合作为毕业设计的...

    基于springcloud+Netty+MQ+mysql的分布式即时聊天系统源码+项目说明(毕业设计).zip

    【资源说明】 基于springcloud+Netty+MQ+mysql的分布式即时聊天系统源码+...* 长连接管理子系统包含在线状态管理模块、聊天主模块、消息推送模块,其中聊天主模块包括一对一聊天和群聊功能; * 聊天信息子系统包含群聊

    (nginx+redis+zookeeper+activemq+storm+dubbo+netty+jvm+并发编程锁+项目实战).txt

    (nginx+redis+zookeeper+activemq+storm+dubbo+netty+jvm+并发编程锁+项目实战)

    Spring Boot 整合 Netty + WebSocket 实时消息推送

    Netty则是一个高性能、异步事件驱动的网络应用程序框架,常用于构建高度可定制的网络服务器。当Spring Boot与Netty结合使用时,可以创建出高效、稳定的实时消息推送系统。 在"Spring Boot 整合 Netty + WebSocket ...

    netty+websocket实现心跳和断线重连

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何利用 Netty 和 WebSocket 实现心跳检测和断线重连机制。 首先,我们需要理解 ...

Global site tag (gtag.js) - Google Analytics