- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《Netty案例集锦之多线程篇(上)》.pdf
Netty案例集锦之多线程篇(上)
1. Netty案例集锦系列文章介绍2
1.1.Netty 的特点2
1.2. 案例来源2
1.3. 多线程篇2
2. Netty3 版本升级遭遇内存泄漏案例3
2.1. 问题描述3
2.2. 问题定位3
2.3. 问题根因5
2.4. 案例总结6
3. Netty3 版本升级性能下降案例7
3.1. 问题描述7
3.2. 问题定位7
3.3. 问题总结9
4. Netty业务Handler接收不到消息案例10
4.1. 问题描述10
4.2. 问题定位10
4.3. 问题总结13
5. Netty4ChannelHandler线程安全疑问14
5.1. 问题咨询14
5.2. 解答15
5.3. 一些特例15
6. 作者简介16
1.Netty案例集锦系列文章介绍
1.1.Netty的特点
Netty入门比较简单,主要原因有如下几点:
1. Netty 的API封装比较简单,将复杂的网络通信通过BootStrap等工具类做
了二次封装,用户使用起来比较简单;
2. Netty源码自带的Demo 比较多,通过Demo可以很快入门;
3. Netty社区资料、相关学习书籍也比较多,学习资料比较丰富。
但是很多入门之后的Netty学习者遇到了很多困惑,例如不知道在实际项
目中如何使用Netty、遇到Netty 问题之后无从定位等,这些问题严重制约了对
Netty 的深入掌握和实际项目应用。
Netty相关问题比较难定位的主要原因如下:
1) NIO编程自身的复杂性,涉及到大量NIO类库、Netty 自身封装的类库等,
当你需要打开黑盒定位问题时,必须对这些类库了如指掌;否则即便定位到
问题所在,也不知所以然,更无法修复;
2) Netty复杂的多线程模型,用户在实际使用Netty 时,会涉及到Netty 自己
封装的线程组、线程池、NIO线程,以及业务线程,通信链路的创建、I/O
消息的读写会涉及到复杂的线程切换,这会让初学者云山雾绕,调试起来非
常痛苦,甚至都不知道从哪里调试;
3) Netty版本的跨度大,从实际商用情况看,涉及到了Netty 3.X、4.X和5.X
等多个版本,每个Major版本之间特性变化非常大,即便是Minor版本都存
在一些差异,这些功能特性和类库差异会给使用者带来很多问题,版本升级
之后稍有不慎就会掉入陷阱。
1.2. 案例来源
Netty 案例集锦的案例来源于作者在实际项目中遇到的问题总结、以及
Netty社区网友的反馈,大多数案例都来源于实际项目,也有少部分是读者在学
习Netty 中遭遇的比较典型的问题。
1.3. 多线程篇
学习和掌握Netty 多线程模型是个难点,在实际项目中如何使用好Netty
多线程更加困难,很多网上问题和事故都来源于对Netty线程模型了解不透彻所
致。鉴于此,Netty案例集锦系列就首先从多线程方面开始。
2.Netty 3 版本升级遭遇内存泄漏案例
2.1. 问题描述
业务代码升级Netty3到Netty4之后,运行一段时间,Java进程就会宕机,
查看系统运行日志发现系统发生了内存泄露(示例堆栈):
图2-1 内存泄漏堆栈
对内存进行监控(切换使用堆内存池,方便对内存进行监控),发现堆内
存一直飙升,如下所示(示例堆内存监控):
图2-2 堆内存监控示例
2.2. 问题定位
使用jmap -dump:format=b,file=netty.bin PID 将堆内存dump 出来,通
过IBM的HeapAnalyzer工具进行分析,发现ByteBuf发生了泄露。
因为使用了Netty4 的内存池,所以首先怀疑是不是申请的ByteBuf没有被
释放导致?查看代码,发现消息发送完成之后,Netty 底层已经调用
ReferenceCountUtil.release(message)对内存进行了释放。这是怎么回事呢?
难道Netty 4.X 的内存
您可能关注的文档
- 《iResearch-2016年海外打车企业案例研究报告-Uber》.pdf
- 《iResearch-2016年海外订餐O2O企业案例研究报告-OpenTable》.pdf
- 《ISACA CSX网络安全认证白皮书》.pdf
- 《ISO质量管理体系289个审核案例》.doc
- 《IT系统安全白皮书》.pdf
- 《JB 10139-1999 滚齿机 安全防护技术条件》.pdf
- 《JB 10140-1999-T 花键轴铣床 安全防护技术条件》.pdf
- 《JB 10166-2016弧齿锥齿轮铣齿机 安全防护技术条件》.pdf
- 《JB 10167-2016 插齿机 安全防护技术条件》.pdf
- 《JB 3643-2016-T 小型弧焊变压器安全要求》.pdf
- 10《那一年,面包飘香》教案.docx
- 13 花钟 教学设计-2023-2024学年三年级下册语文统编版.docx
- 2024-2025学年中职学校心理健康教育与霸凌预防的设计.docx
- 2024-2025学年中职生反思与行动的反霸凌教学设计.docx
- 2023-2024学年人教版小学数学一年级上册5.docx
- 4.1.1 线段、射线、直线 教学设计 2024-2025学年北师大版七年级数学上册.docx
- 川教版(2024)三年级上册 2.2在线导航选路线 教案.docx
- Unit 8 Dolls (教学设计)-2024-2025学年译林版(三起)英语四年级上册.docx
- 高一上学期体育与健康人教版 “贪吃蛇”耐久跑 教案.docx
- 第1课时 亿以内数的认识(教学设计)-2024-2025学年四年级上册数学人教版.docx
文档评论(0)