【从零学Netty】Netty调优:参数调优


Netty参数调优

Linux系统参数

参数 描述 默认值 推荐调整
ulimit 规定的单个进程能够打开的最大文件句柄数量 1024

Netty系统参数

ServerSocketChannel参数,通过option来设置
参数 描述 默认值 推荐调整
SO_RCVBUF 为Accept创建的Socket Channel设置SO_RCVBUF,让SO_RCVBUF这个参数更快的生效,因为有可能连接一创建马上就开始接收数据了 4KB
SO_REUSEADDR 端口重用 默认关闭 根据实际场景判断
SO_BACKLOG 最大的等待连接数 默认128
IP_TOS 设置IP头部的Type-of-service字段,用于描述IP包的优先级和Qos选项 0000 - normal service
SocketChannel参数,通过childOption来设置
参数 描述 默认值 推荐调整
SO_SNDBUF TCP数据发送缓冲区大小 4KB
SO_RCVBUF TCP数据接受缓冲区大小 4KB
SO_KEEPALIVE TCP层KEEPALIVE 默认关闭
SO_REUSEADDR 端口重用,解决”Address already in use”。让关闭连接释放的端口更早可使用。常用于多网卡(IP)绑定相同端口场景。并不是让TCP绑定完全相同的IP+端口来重复启动 默认不开启
SO_LINGER 关闭Socket的延迟时间,默认禁止该功能,Socket.close方法立即返回 默认不开启
IP_TOS 设置IP头部的Type-of-service字段,用于描述IP包的优先级和Qos选项。 0000 - normal service
TCP_NODELAY 设置是否启用Nagle算法:将小的碎片数据连接成更大的报文来提高发送速率。如果需要发送一些较小的报文关闭该算法 默认关闭 根据实际场景判断,一般开启没问题

Netty核心参数

ChannelOption参数,通过option来设置
参数 描述 默认值 推荐调整
WRITE_BUFFER_WATER_MARK 高低水位线、间接防止写数据OOM 底水位32KB,高水位64KB
CONNECT_TIMEOUT_MILLIS 客户端连接服务器最大允许时间 30秒
MAX_MESSAGES_PER_READ 最大允许连续读次数 16次
WRITE_SPIN_COUNT 最大允许连续写次数 16次
ALLOCATOR ByteBuf分配器,设置Buf分配是池化还是非池化,是堆内存还是堆外内存 ByteBufAllocator.DEFULT:池化+堆外
RCVBUF_ALLOCATOR 数据接收ByteBuf分配大小计算器+读次数控制器 AdaptiveRecvByteBufAllocator
AUTO_READ 是否监听读事件 默认打开
AUTO_CLOSE 写数据失败是否关闭连接 默认打开。如果失败不关闭的话下次还会写,可能还是失败
MESSAGE_SIZE_ESTIMATOR 数据(ByteBuf、FileRegion等)大小计算器 DefaultMessageSizeEstimator.DEFULT
SINGLE_EVENTEXECUTOR_PER_GROUP 当增加一个handler且指定EventExecutorGroup时决定这个handler是否只用EventExecutorGroup中的一个固定的EventExecutor 默认True。一个handler不管是否共享,都绑定唯一一个EventExecutor。所以小名叫pinEventExecutor。没有指定EventExecutor就复用channel的NioEventLoop
ALLOW_HALF_CLOSURE 关闭连接时,允许半关 默认不允许半关

Netty系统属性

System Property属性,通过-Dio.netty.{xxx}={ooo}来设置
参数 描述 默认值 推荐调整
io.netty.eventLoopThreads IO Thread数量 默认:availableProcessors * 2
io.netty.availableProcessors 指定availableProcessors 读取系统参数,注意Docker获取不准确需要指定 Docker部署需要调整
io.netty.allocator.type 内存池化还是非池化 池化
io.netty.noPreferDirect 内存堆内还是堆外 堆外
io.netty.leakDetection.level 内存泄露检测级别 默认SIMPLE
……

Netty参数调优注意点

  1. 不懂不要乱动,避免过早优化(所有调参的场景都适用)
  2. childOption/option设置错误不会报错,但是不会生效

总结

​ Netty一般应用场景需要调整的参数很少,省心


文章作者: maybe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 maybe !