在高并发压测过程中发现连接数超过 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垃圾回收掉,内存一直在增长,存在内存泄露。
相关推荐
CPU 高消耗排查
Netty中文指南教程 详细描述netty的官方文档,中文版
JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA版基于netty的物联网高并发智能网关 JAVA...
NettyDemo Netty使用实例,对象传递调用; LineBasedFrameDecoder + 消息中得换行符;解决TCP 粘包问题; Java序列化方案编解码对比;对象调用方案
spring boot demo,整合netty5实现高并发websocket,并引入slf4g+lombok,采用maven形式; 直接导入运行,有测试页面也有实现代码及详细注释,src/main/webapps/TestNettyWebSocket.html里第十行改成 ws://localhost...
netty5 对象传输demo
Java异步NIO框架Netty实现高性能高并发无标题笔记 1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨 节点...
netty 4.1中文.CHM,chm格式,中文api,开发netty的中文工具书
netty 4.1 中文.CHM,开发netty的中文工具书 帮助文档,中文版netty
【Q-01】Netty 中的 NioEventLoop 是什么?请谈一下你的认识。 【RA】Netty 中的 NioEventLoop 是一个 EventExecutor,其是在创建 NioEventLoopGroup 时创 建的,存放在一个 EventExecutor 数组中。但其本质上是一个...
Netty 高并发深入浅出学习高并发服务器Netty 高并发深入浅出学习高并发服务器
Netty应用中文详解
Netty_中文技术文档,Netty操作指南
同过netty实现HTTP服务器(或者客户端) 。务器提供诸如HTML文件和其他内容之类的资源,或代表客户端执行其他功能,向客户端返回响应... 响应包含有关请求的完成状态信息,并且还可以在其消息正文中包含所请求的内容。
Netty中使用java序列化做的demo,请运行代码中的SubReqServer和SubReqClient的Main函数即可
Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端:https://azhon.blog.csdn.net/article/details/100569489 Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的...