上一篇【第60篇】Netty并发编程实践——多线程安全的正确姿势下一篇【第62篇】Netty生产环境部署——Linux最佳配置指南一、操作系统参数# 文件描述符限制ulimit-n1000000# TCP全连接队列echo1024/proc/sys/net/core/somaxconn# 全连接队列溢出不重置echo1/proc/sys/net/ipv4/tcp_abort_on_overflow# TIME_WAIT复用echo1/proc/sys/net/ipv4/tcp_tw_reuse二、JVM参数java-Xmx4g-Xms4g\# 堆大小一致避免动态伸缩-XX:UseG1GC\# G1 GC低延迟-XX:MaxGCPauseMillis200\-XX:DisableExplicitGC\-Dio.netty.noUnsafefalse\# 启用Unsafe-Dio.netty.leakDetection.levelSIMPLE\-Dio.netty.allocator.numHeapArenas4\-Dio.netty.allocator.numDirectArenas4\-jarapp.jar三、Netty参数ServerBootstrapbnewServerBootstrap();b.option(ChannelOption.SO_BACKLOG,1024)// 全连接队列.option(ChannelOption.SO_REUSEADDR,true)// 端口复用.childOption(ChannelOption.TCP_NODELAY,true)// 禁用Nagle.childOption(ChannelOption.SO_KEEPALIVE,true)// TCP保活.childOption(ChannelOption.SO_RCVBUF,32*1024)// 接收缓冲区32KB.childOption(ChannelOption.SO_SNDBUF,32*1024)// 发送缓冲区32KB.childOption(ChannelOption.ALLOCATOR,PooledByteBufAllocator.DEFAULT).childOption(ChannelOption.WRITE_BUFFER_WATER_MARK,newWriteBufferWaterMark(32*1024,64*1024));// 水位线四、线程数配置// Boss线程通常1-2个intbossThreads1;// Worker线程CPU核心数 * 2intworkerThreadsRuntime.getRuntime().availableProcessors()*2;EventLoopGroupbossGroupnewNioEventLoopGroup(bossThreads);EventLoopGroupworkerGroupnewNioEventLoopGroup(workerThreads);五、调优检查清单层级项目建议值OSulimit -n≥1000000OSsomaxconn≥1024JVMGCG1GCNettySO_BACKLOG≥1024NettyTCP_NODELAYtrueNetty连接池PooledByteBufAllocator代码Sharable无状态Handler共享六、总结瓶颈解决方案端口不够SO_REUSEADDRtrue连接丢失SO_BACKLOG增大延迟高TCP_NODELAYtrueGC频繁内存池直接内存上一篇【第60篇】Netty并发编程实践——多线程安全的正确姿势下一篇【第62篇】Netty生产环境部署——Linux最佳配置指南