《Netty案例集锦之多线程篇(上)》.pdfVIP

《Netty案例集锦之多线程篇(上)》.pdf

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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 的内存

文档评论(0)

ghfa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档