【Netty源码解读和权威指南】第61篇:Netty性能调优——从10万到100万连接的优化之路
·
上一篇【第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最佳配置指南
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)