Netty常见“学习”题总结(付费)
约 722 字大约 2 分钟
31. Netty 如何实现优雅停机?
- shutdownGracefully():EventLoopGroup 提供了
shutdownGracefully()方法。 - 机制:
- 停止接受新的连接请求。
- 等待一段时间(Quiet Period),让正在处理的请求处理完毕。
- 关闭所有 Channel 和 Selector。
- 释放所有资源(线程池、内存池)。
📝 通俗解释
关门打烊。
- shutdownGracefully:不像直接拔电源(kill -9)那么暴力。
- 就像商店关门:
- 挂上“停止营业”牌子(不接新客)。
- 把店里还在吃饭的客人伺候完(处理现有请求)。
- 打扫卫生,关灯锁门(释放资源)。
32. ChannelOption.SO_BACKLOG 参数的作用是什么?
- 含义:TCP 连接队列的大小(Sync Queue + Accept Queue)。
- 作用:当服务器处理连接的速度慢于客户端发起连接的速度时,未处理的连接会放入队列。如果队列满了,新的连接会被拒绝(抛出 Connection Refused)。
- 调优:对于高并发服务器,建议调大此参数(如 1024 或更大),防止连接风暴时丢包。
33. 为什么 Netty 5 被废弃了?
- 复杂性增加:Netty 5 尝试将 EventLoop 的线程模型改为 ForkJoinPool,虽然理论上能利用多核优势,但在实际测试中并没有带来明显的性能提升,反而大大增加了代码的复杂度和维护成本。
- 推荐:目前主流版本是 Netty 4.1.x。
34. ByteBuf 的引用计数(Reference Counting)机制是怎样的?
- 原理:ByteBuf 实现了
ReferenceCounted接口。初始计数为 1。 - retain():计数 +1。
- release():计数 -1。当计数为 0 时,对象会被回收(如果是池化的,归还给池;如果是 Direct,释放堆外内存)。
- 注意:谁最后使用谁负责 release。如果不释放,会导致内存泄漏(Memory Leak)。Netty 提供了
ResourceLeakDetector来检测泄漏。
📝 通俗解释
借书卡。
- 引用计数:就像图书馆的书,每多一个人借阅,计数 +1(retain)。
- 每还一个人,计数 -1(release)。
- 当计数变成 0,说明没人看了,图书管理员就把书收回去了(回收内存)。
- 忘了还书?那就内存泄漏了。
35. Unpooled 类的作用是什么?
- 工具类:用于创建非池化的 ByteBuf(Unpooled ByteBuf)。
- 常用方法:
Unpooled.buffer():创建一个堆内 ByteBuf。Unpooled.directBuffer():创建一个堆外 ByteBuf。Unpooled.wrappedBuffer():将 byte 数组或 ByteBuffer 包装成 ByteBuf(零拷贝)。Unpooled.copiedBuffer():深拷贝数据创建 ByteBuf。
📝 通俗解释
工具箱。
- Unpooled:一个专门用来造 ByteBuf 的工厂类。
- 就像
Arrays.asList()用来造 List 一样。方便你快速创建各种类型的 ByteBuf(堆内、堆外、包装等)。
