上一篇【第60篇】Netty并发编程实践——多线程安全的正确姿势
下一篇【第62篇】Netty生产环境部署——Linux最佳配置指南


一、操作系统参数

# 文件描述符限制
ulimit -n 1000000

# TCP全连接队列
echo 1024 > /proc/sys/net/core/somaxconn

# 全连接队列溢出不重置
echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow

# TIME_WAIT复用
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

二、JVM参数

java -Xmx4g -Xms4g \                    # 堆大小一致,避免动态伸缩
     -XX:+UseG1GC \                       # G1 GC,低延迟
     -XX:MaxGCPauseMillis=200 \
     -XX:+DisableExplicitGC \
     -Dio.netty.noUnsafe=false \          # 启用Unsafe
     -Dio.netty.leakDetection.level=SIMPLE \
     -Dio.netty.allocator.numHeapArenas=4 \
     -Dio.netty.allocator.numDirectArenas=4 \
     -jar app.jar

三、Netty参数

ServerBootstrap b = new ServerBootstrap();
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,
     new WriteBufferWaterMark(32*1024, 64*1024));   // 水位线

四、线程数配置

// Boss线程:通常1-2个
int bossThreads = 1;

// Worker线程:CPU核心数 * 2
int workerThreads = Runtime.getRuntime().availableProcessors() * 2;

EventLoopGroup bossGroup = new NioEventLoopGroup(bossThreads);
EventLoopGroup workerGroup = new NioEventLoopGroup(workerThreads);

五、调优检查清单

层级 项目 建议值
OS ulimit -n ≥1000000
OS somaxconn ≥1024
JVM GC G1GC
Netty SO_BACKLOG ≥1024
Netty TCP_NODELAY true
Netty 连接池 PooledByteBufAllocator
代码 @Sharable 无状态Handler共享

六、总结

瓶颈 解决方案
端口不够 SO_REUSEADDR=true
连接丢失 SO_BACKLOG增大
延迟高 TCP_NODELAY=true
GC频繁 内存池+直接内存

上一篇【第60篇】Netty并发编程实践——多线程安全的正确姿势
下一篇【第62篇】Netty生产环境部署——Linux最佳配置指南


Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐