Netty百万级推送服务设计要点:http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points/
Netty服务端优化
-
在高并发场景下,服务端EventLoopGroup处理注册事件、任务处理1个处理能力是有限的,我尽可能使用最大,CUP:2*4,16线程,可配置最大16
EventLoopGroup workerGroup = new NioEventLoopGroup(16); -
高并发Handle处理请求业务使用业务线程池异步处理业务
ExecutorService businessThreadPool = Executors.newFixedThreadPool(16); -
Netty4使用对象池,重用缓冲区
bootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
bootstrap.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT); -
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秒做心跳
Title:Netty调优
Author:Donie.Huang
Created:2016-05-24, 18:45:37
Updated:2016-06-07, 19:29:02
Full URL:https://github.com/2016/05/24/netty-jvm/
License: "CC BY-NC-SA 4.0" Keep Link & Author if Distribute.