Netty性能调优奇技淫巧还有其他的吗?
来源:12-1 性能调优概述

鋒Nic
2018-06-24
第12章节关于单机百万连接调优使用的是突破局部文件句柄限制即ulimit -n修改/etc/security/limits.conf调整一个进程能够打开的最大连接数,突破全局文件句柄限制即修改/proc/sys/fs/file-max(临时生效,及时修改重启还原)或者/etc/sysctl.conf(永久生效)调整Linux系统所有进程能够打开的最大连接数,关于Netty应用级别性能调优使用的是ChannelHandler自定义业务线程池,将数据库或者网络阻塞连接线程耗时操作由主线程搬迁到业务线程池执行,添加ChannelHandler提供指定EventLoopGroup,将ChannelHandler里面方法所有的操作都放在此线程池处理,还有https://www.jianshu.com/p/051d566e110d关于JVM调优以外是否还有其他关于性能调优的奇技淫巧?
1回答
-
1.如果QPS过高,数据传输过快的情况下,调用writeAndFlush可以考虑拆分成多次write,然后单次flush,也就是批量flush操作
2.分配和释放内存尽量在reactor线程内部做,这样内存就都可以在reactor线程内部管理
3.尽量使用堆外内存,尽量减少内存的copy操作,使用CompositeByteBuf可以将多个ByteBuf组合到一起读写
4.外部线程连续调用eventLoop的异步调用方法的时候,可以考虑把这些操作封装成一个task,提交到eventLoop,这样就不用多次跨线程
5.尽量调用ChannelHandlerContext.writeXXX()方法而不是channel.writeXXX()方法,前者可以减少pipeline的遍历
6.如果一个ChannelHandler无数据共享,那么可以搞成单例模式,标注@Shareable,节省对象开销对象
7.如果要做网络代理类似的功能,尽量复用eventLoop,可以避免跨reactor线程
暂时就列了这么多,希望能给你带来帮助!412018-06-24
相似问题