netty模拟tcpClient高并发配置总结(2)

in 四月桐花 with 0 comment

netty代码端同样需要对高并发场景进行调优

适用场景

高并发场景下,通常要使用多线程的方式创建连接(类似下面的方式),同时需要避免使用syncwait这种同步方法获取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)