netty代码端同样需要对高并发场景进行调优
适用场景
高并发场景下,通常要使用多线程的方式创建连接(类似下面的方式),同时需要避免使用sync
或wait
这种同步方法获取tcp通信过程中的状态.最好是使用Listener的方式异步处理.(为了避免第一步创建连接的时候就出现抢占冲突,建议connect()方法调用后先使用sync()进行同步,因为创建连接的过程一般不需要外部代码介入)
new Thread(new Runnable() {
@Override public void run() {
// TODO:send()
}
}).start();
ChannelOption
模拟tcpClient高并发场景使用的是Nio
模式,下面列出的参数与Client性能强相关,对Server端的优化不在此列.
参数名 | 作用 | 建议值 |
---|---|---|
SO_LINGER | 设置 SO_LINGER 套接字选项,决定关闭连接时的行为。 | DEFALUT 或 0 |
TCP_NODELAY | 如果启用,则禁用 Nagle 算法,减少小包合并,提高延迟敏感应用的响应速度。 | TRUE |
SINGLE_EVENTEXECUTOR_PER_GROUP | 是否使用单个执行器处理所有线程 | FALSE |
JVM
jvm的参数通常情况下,除了cpu和内存资源会影响连接的创建,其他参数的影响暂未发现.
其他
netty的配置项非常多,对其并发性能有影响的因素也很多,上面提到的优化建议,都不涉及在pipeline中添加处理事件(如Encoder,Decoder,Handler等).每个连接,都是一个独立的channel,channel被创建后,pipeline中添加的处理类也会创建新的.要尽量避免静态全局变量对并发的影响.
总结
以上配置,在jdk8和jdk17都有测试,netty版本(4.1.115.Final)
本文由 momoker 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Dec 9,2024