`
wangmengbk
  • 浏览: 292302 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

CPU高占用100% 以及Netty中的NioEventLoop对象下的 SchedukedFutureTask 造成内存溢出

    博客分类:
  • J2EE
 
阅读更多

在高并发压测过程中发现连接数超过 22000,在运行过程出现 堆溢出,并同样生成了dump.hprof 快照文件。

通过IMB heapAnalyzer 分析发现 程序中某个对象过多。

 

 


通过程序优化后该现象没有了,不过有新的出现 netty 中的 nioEventLoop对象 以及该对象下的 SchedukedFutureTask 任务大量积压 同样造成了内存溢出,同时伴有 CPU 100% 一直进行 fullGC,效果如下图:



 

gc执行情况:




 在执行过程中 是用vmstat 命令查看r值,r值等待执行的线程比较高,如下图:




查看占用CPU最高的5个线程结果 都在执行fullgc 效果图如下:



  

通过对业务代码 的分析发现用户在netty中使用IdleStateHandler用于在链路空闲时进行业务逻辑处理,但是空闲时间设置的比较大,为5分钟.通过优化为 30秒后,该现象没有出现。并且执行效果也明显提升。

vmstat 效果:



 gc 执行效果:



 

 

通过以上完美解决该问题。

具体原因:

Netty的IdleStateHandler会根据用户的使用场景,启动三类定时任务,分别是:ReaderIdleTimeoutTask、WriterIdleTimeoutTask和AllIdleTimeoutTask,它们都会被加入到NioEventLoop的Task队列中被调度和执行。

由于超时时间过长,10k个链接会创建10k个ScheduledFutureTask对象,每个对象还保存有业务的成员变量,非常消耗内存。用户的持久代设置的比较大,一些定时任务被老化到持久代中,没有被JVM垃圾回收掉,内存一直在增长,存在内存泄露。

  

  • 大小: 371.3 KB
  • 大小: 707.8 KB
  • 大小: 92.5 KB
  • 大小: 36.5 KB
  • 大小: 151.5 KB
  • 大小: 112.2 KB
  • 大小: 92.5 KB
  • 大小: 115.4 KB
  • 大小: 62.7 KB
分享到:
评论

相关推荐

    CPU 高消耗排查

    CPU高消耗是指系统或应用程序在运行过程中占用大量的CPU资源,导致系统响应变慢甚至出现卡顿的现象。这种问题通常会影响系统的整体性能和用户体验。因此,对于运维工程师或者开发人员来说,了解如何排查和解决CPU高...

    NettyDemo Netty使用实例,对象传递调用

    在本文中,我们将深入探讨Netty在实际应用中的实例——对象传递调用,以及如何解决TCP粘包问题。同时,我们还会讨论Java序列化方案在Netty中的编解码对比。 首先,让我们来看看TCP粘包问题。在TCP协议中,由于其...

    最新netty中文文档chm版

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“最新Netty中文文档CHM版”为中国的开发者提供了一个方便的中文学习资源,解决了阅读英文原版文档时的...

    Java Netty基于对象数据传输Demo

    这个"Java Netty基于对象数据传输Demo"应该是演示了如何使用Netty进行对象序列化和反序列化,以便在网络中高效地传输自定义对象。 Netty的核心在于它的`ByteBuf`类,它是字节缓冲区的高效实现,优于Java NIO的`...

    netty对象传输gzipdemo

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在“netty对象传输gzipdemo”中,我们关注的是如何使用Netty来传输对象,并且利用gzip进行数据压缩,以提高...

    netty传输对象源码

    在这个“netty传输对象源码”的主题中,我们将深入理解如何使用Netty来传输自定义的对象,同时结合Spring和Maven进行项目构建。首先,让我们了解一下Netty的基本概念。 Netty的核心是其Channel和EventLoop系统。...

    Netty中文指南教程

    - **扩展性**: 开发者可以根据实际需求轻松地扩展Netty的功能,例如添加新的协议支持、调整网络配置等,而不必担心对现有系统的稳定性造成影响。 **3. 易于使用** 尽管Netty提供了丰富的功能和强大的性能,但它...

    netty+thrift高并发高性能

    ### Netty+Thrift 实现高并发高性能的关键技术解析 #### 一、引言 在当前互联网技术高速发展的背景下,高性能、高并发的服务框架成为众多企业和开发者追求的目标。Netty作为一款高性能、异步事件驱动的网络应用...

    netty中的多线程应用

    在 Netty 中,多线程的应用是其处理高并发、高性能的关键因素之一。下面我们将深入探讨 Netty 中的多线程并发应用。 1. **线程模型** Netty 采用了 Boss-Worker 线程模型,它由两部分组成:Boss 线程和 Worker ...

    netty官网学习手册中文版

    通过阅读这个“Netty_3.1中文用户手册.pdf”,你可以了解到Netty的基本原理、设计模式以及如何在实际项目中应用这些知识。尽管Netty不断更新,但基础概念和设计思想在新版本中仍然适用。因此,无论你是初学者还是...

    Netty3.1 中文用户手册

    Netty是一个基于Java的异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty使用了NIO(New I/O)机制,允许Java应用程序同时进行网络通信(如读写操作),而不必要阻塞或等待I/O...

    Netty 高并发深入浅出学习高并发服务器

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,专为 Java 平台设计,用于快速开发可维护的高性能协议服务器和客户端。在高并发场景下,Netty 展现出强大的性能优势,使得它在分布式系统、微服务、云计算等...

    netty 4.1 中文api 帮助文档 + 用户指南

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨 Netty 4.1 的中文API帮助文档和用户指南,以及如何利用这些资源来提升你的网络编程...

    netty4中文用户手册

    Netty的ByteBuf是一个灵活的可扩展的缓冲区,其抽象了字节序列并支持自动扩容以及内存回收等优化操作,显著降低了内存泄漏的风险。 Netty4用户手册还介绍了如何使用Netty实现基础的网络应用,例如抛弃服务器、应答...

    netty-redis-zookeeper高并发实战学习-netty-redis-zookeeper.zip

    在IT行业中,Netty、Redis和ZooKeeper是三个非常重要的技术组件,它们分别在不同的领域发挥着关键作用。Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。Redis则是...

    Netty-API-文档中文版

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“Netty-API-文档中文版”提供了详细的Netty API 使用指南,帮助开发者更容易理解和应用Netty,避免了...

    Netty 中文教程

    - **性能优化**:通过源码分析了解Netty如何优化内存分配、减少对象创建等提高性能的策略。 7. **实战应用**: - **案例研究**:结合实际应用场景,如聊天服务器、分布式系统等,展示如何使用Netty构建高性能网络...

    Netty进阶之路-跟着案例学Netty

    Netty的线程模型也是其高效运行的关键,EventLoopGroup和NioEventLoop的使用确保了高并发下的性能。书中会详细解析这些概念,并指导如何正确配置线程池以优化性能。 此外,书中还会探讨Netty的安全性,包括SSL/TLS...

    NETTY+ACTIVITYMQ实现高用户并发

    标题中的“NETTY+ACTIVITYMQ实现高用户并发”表明我们正在探讨如何使用Netty和ActiveMQ结合来处理大量并发用户请求。Netty是一个高性能、异步事件驱动的网络应用程序框架,而ActiveMQ是Apache出品的一款开源消息...

Global site tag (gtag.js) - Google Analytics