Netty调优

Netty百万级推送服务设计要点:http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points/

Netty服务端优化

  1. 在高并发场景下,服务端EventLoopGroup处理注册事件、任务处理1个处理能力是有限的,我尽可能使用最大,CUP:2*4,16线程,可配置最大16
    EventLoopGroup workerGroup = new NioEventLoopGroup(16);

  2. 高并发Handle处理请求业务使用业务线程池异步处理业务
    ExecutorService businessThreadPool = Executors.newFixedThreadPool(16);

  3. Netty4使用对象池,重用缓冲区
    bootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
    bootstrap.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);

  4. Linux 默认单进程打开的最大句柄数是1024,高并发场景需要修改最大句柄数

  • 查看当前句柄数
1
[root@localhost ~]# ulimit -a
  • 修改limits.conf文件
1
[root@localhost ~]# vi /etc/security/limits.conf

修改成最大句柄数,添加如下配置参数,修改后保存,注销用户,重新登录,通过ulimit -a 查看是否生效。

1
2
* soft nofile 65536
* hard nofile 65536

Netty客户端优化

  • 自动调整下一次缓冲区建立时分配的空间大小,避免内存的浪费
1
bootstrap.option(ChannelOption.RCVBUF_ALLOCATOR, AdaptiveRecvByteBufAllocator.DEFAULT);
  • 使用内存池
1
bootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
  • Netty客户端使用BlockingQueue对象池初始化,池的大小跟格CPU线程数进行配置,实现多Channel工作
  • Netty客户端实现心跳机制保持长链接,在空闲时每3秒做心跳

你可能感兴趣的:(netty)