2024年最全千载难逢!华为工程师带你跟着案例学Netty,有图有真相,阿里面试题java

Java高频面试专题合集解析:

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

更多Java架构进阶资料展示

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

第一章.Netty服务端意外退出案例

  • Netty服务端意外退出问题

  • Netty优雅退出机制

内存溢出和线程膨胀

将连接池的连接数上限配置为100, 业务高峰期发生了OOM异常,业务需要重启才能恢复,相关异常日志如图所示。

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

本章通过两个简单的案例分析,引出了信号量、Java Daemon 线程及Netty优雅退出相关知识。在实际项目中,知识往往是交叉在一起的,要想熟练掌握Netty服务端的启动和退出,编写更优雅和健壮的代码,需要重点掌握如下几个知识点:

  • 操作系统的信号量和JavaDeamon线程工作机制。

  • Netty 的NioEventLoop线程工作原理。

  • Netty优雅退出相关的几个核心类库。

第2章Net青户满连接池资源世局实例

  • Netty连接池资源泄漏问题

  • Netty客户端创建机制

错用NIO编程模式

前面连接池泄漏的原因是采用BIO模式来调用NIO通信框架,不仅没达到优化的效果,而且还发生了OOM异常。

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

JavaNIO客户端创建原理分析

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

Netty客户端创建原理分析

Bootstrap是Socket客户端创建工具类,用户通过Bootstrap 可以方便地创建Netty的客户端并发起异步TCP连接操作,Netty 客户端创建流程如图2-10所示。

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

小结

本章分析了一个生产环境Netty客户端连接池资源泄漏案例,详细讲解了Netty 客户端创建的流程和工作原理,以及在实际项目中如何正确地实现连接池,避免发生并发安全和资源不当释放等问题。

第3章Netty内存池泄漏疑云案例

  • Netty内存池泄漏问题

  • Netty内存池工作机制

响应消息内存释放玄机

对业务ByteBuf申请相关代码进行排查,发现响应消息由业务线程创建,但是却没有主动释放,因此怀疑是响应消息没有释放导致的内存泄漏。因为响应消息使用的是PooledHeapByteBuf,如果发生内存泄漏,利用堆内存监控就可以找到泄漏点,通过JavaVisualVM工具观察堆内存占用趋势,并没有发现堆内存发生泄漏,如图3-2所示。

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

内存池工作原理分析

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

Netty内存池是一把双刃剑,使用得当会在很大程度上提升系统的性能,但是误用则会带来内存泄漏问题。从表面上看,只要遵循主动申请和释放原则即可,但是由于内存的申请和释放可能由Netty框架隐性完成,增加了内存管理的复杂性。

通过学习Netty 收发消息的ByteBuf 申请和释放机制,可以避免在项目中因误用ByteBuf而发生内存泄漏。在熟悉了ByteBuf 的申请和释放机制后,通过对Netty内存池工作原理和关键源码的分析,读者可以更好地掌握Netty内存池的使用方法。

第4章ByteBuf故障排查案例

  • HTTP协议栈ByteBuf使用问题

  • Netty ByteBuf实现机制

ByteBuf引用计数器工作原理和源码分析

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

ByteBuf的申请和释放可能会跨Netty 的NioEventLoop 和业务线程,跨线程操作ByteBuf时一定要谨慎,防止发生并发安全和非法引用问题。另外,由于ByteBuf的实现类非常多,不同的实现功能特性存在差异,用户在使用时一定要认真阅读API Doc说明,必要时要看源码,防止误用导致出现功能和性能问题。

第5章Netty发送队列积压导致内存泄漏案例

  • Netty发送队列积压案例

  • Netty消息发送工作机制

高井发故障场景

为了便于分析,对真实的业务代码做简化处理,在一个客户端内部创建一个线程,向服务端循环发送请求消息,模拟客户端高并发场景,示例代码如下:

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

消息发送源码分析

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

本章通过发送队列积压案例,对Netty 的消息发送原理和源码进行了深入讲解,熟悉了Netty的发送队列工作机制、高低水位机制等,就可以在实际项目中更好地利用这些功能,提升基于Netty构建的通信框架的可靠性。

第6章API网关高并发压测性能波动案例

  • 高并发压测性能波动问题

  • Netty消息接入内存申请机制

主动内存泄漏定位法

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

对于高并发接入的API网关类产品,需要谨慎处理消息的内存申请和释放,减少不必要的申请(例如透传类场景),同时要防止内存空间的浪费。借鉴Netty请求消息读取的内存申请策略和动态扩容机制,并用在实际项目中,可以得到较大的性能提升。

第7章Netty ChannelHandler并发安全案例

  • Netty ChannelHandler并发安全问题

  • Netty ChannelHandler工作机制

ChannelHandler的并发陷阱

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

ChannelHandler是用户最常用的接口,掌握了ChannelHandler 及ChannelPipeline工作原理,就清楚了什么时候该使用共享的ChannelHandler,什么时候该对ChannelHandler做并发保护。无论缺少保护还是过度保护,都会给业务带来副作用,甚至严重的功能或性能问题,因此ChannelHandler的并发安全性是非常重要的。

第8章车联网服务端接收不到车载终端消息案例

  • 车联网服务端接收不到车载终端消息问题

  • NioEventL oop线程工作机制

NioEventLoop线程防挂死策略

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

I/O读写操作原理和源码分析

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

Netty多线程最佳实践

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

当Netty服务端接收不到消息时,首先需要检查是客户端没有发送到服务端,还是服务端没有读取消息。导致服务端无法读取消息的原因有很多,常见的包括GC导致的应用线程暂停、服务端的NioEventLoop线程被意外阻塞等。通过网络I/O线程和业务逻辑线程分离,可以实现双方的并行处理,提升系统的可靠性。对于用户而言,在编写代码时,始终需要考虑NioEventLoop 线程是否会被业务代码阻塞,只有消除所有可能导致的阻塞点,才能保证程序稳定运行。

第9章Netty 3.X版本升级案例

  • Netty 3.X的版本升级背景

  • 版本升级后数据被篡改问题

  • 升级后上下文丢失问题

  • 升级后应用遭遇性能下降问题

  • Netty线程模型变更分析

性能下降原因分析

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

就Netty而言,掌握线程模型的重要性不亚于熟练使用它的API和功能。很多时候业务遇到的功能、性能等问题,都是由于缺乏对Netty线程模型和原理的理解导致的。对Netty的版本升级需要从功能、兼容性和性能等多个角度进行综合考虑,切不可只盯着API和功能变更这个“芝麻”,而丢掉了线程模型和性能这个“西瓜”。API的变更会导致编译错误,但是性能下降却隐藏于无形之中,稍不留意就会中招。对于强调快速交付和敏捷开发的互联网类应用,升级的时候尤其要小心,不能功能调通后简单验证就匆忙上线。

第10章Netty并发失效导致性能下降案例

  • 业务ChannelHandler无法并发执行问题

  • Netty DefaultEventExecutor工作机制

DefaultEventExecutor原理和源码分析

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

业务线程池优化策略

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

Netty框架本身实现了高性能的网络读写操作,但是后端业务逻辑执行却是影响性能的关键要素,如果直接将复杂的业务逻辑操作放在I/O线程中完成,一些同步阻塞操作可能会导致I/O线程被阻塞。当把业务逻辑单独拆分到业务线程池中进行处理,与I/O线程隔离时,不同的业务线程模型对性能的影响也非常大。Netty 提供了默认的并行调度ChannelHandler的能力,但是如果使用不当,也会带来性能问题。对于业务自定义实现的线程池,如果追求更高的性能,就需要在消除或者减轻锁竞争上下工夫,线程绑定技术是一个不错的选择,但是也需要根据业务实际场景来实现,例如TCP长连接就可以使用Channelld做Key,如果是短连接,客户端的端口是随机变化的,则不适合使用Channelld.

第11章loT百万长连接性能调优案例

  • 海量长连接接入面临的挑战

  • 智能家居内存泄漏问题

  • 操作系统参数调优

  • Netty性能调优

  • JVM相关性能优化

设置合理的线程数

对于线程池的调优,主要集中在用于接收海量设备TCP连接、TLS握手的Acceptor线程池(Netty 通常叫boss NioEventLoopGroup) 上,以及用于处理网络数据读写、心跳发送的I/O工作线程池(Netty 通常叫work NioEventLoopGroup)上。

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

I/O线程和业务线程分离

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

第12章静态检查修改不当引起性能下降案例

  • Edgeo Secie性能严重下降问题

  • 克隆和浅拷贝

Netty的对象拷贝实现策略

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

第13章Netty性能统计误区案例

  • 时延毛刺排查相关问题

  • Netty关键性能指标采集策略

都是同步思维惹的祸

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

第14章gRPC的Netty HTTP/2实践案例

  • gRPC基础入门

  • gRPC Netty HTTP/2服务端工作机制

  • gRPC Netty HTTP/2客户端工作机制

  • gRPC消息序列化机制

  • gRPC线程模型

RPC框架简介

RPC框架的目标就是让远程服务调用更加简单、透明,RPC框架负责屏蔽底层的传输方式(TCP 或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和调用过程。

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

为什么选择HTTP/2

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

服务端接收HTTP/2请求消息原理和源码分析

gRPC服务端的请求消息由Netty HTTP/2协议栈负责接入,gRPC通过继承Http2FrameAdapter,将自定义的FrameListener添加到Netty的Http2ConnectionDecoder中,在HTTP/2请求消息头和消息体被解析成功之后,回调gRPC的FrameListener,接收并处理HTTP/2请求消息,如图14-8所示。

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

NettyHTTP/2客户端创建原理和源码分析

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

Google Protobuf简介

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

千载难逢!华为工程师带你跟着案例学Netty,有图有真相

[外链图片转存中…(img-oGuY6r5S-1715105151258)]

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

[外链图片转存中…(img-sPzohOeC-1715105151258)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值