压测netty框架,返回少量java.net.ConnectException:Connection timed out,优化代码

xx项目需要做性能测试,开发端主要是netty框架,500并发TPS能达到7000+,但是返回少量

 Connection timed out,原因有可能是代码有问题,也有可能仅是客户端主动关闭了连接,导致服务端的写失败,linux服务器本身无法处理如此大量请求,监控到客户端并未有大量CLOSE_WAIT状态,不过大量timewait状态,服务器端linxu内核已做各项参数优化。

优化:一是限流,二是让服务端在写数据之前判断一下channel是否已关闭。采用方法一,压力端脚本采用限流,处理正常(若压测脚本做分流限制,不符合生产大批量并发场景)。故采用方法二,让服务端在写数据之前判断一下channel是否已关闭,本次优化方案主要采用优化代码:

1.      if (!channel.isConnected()) {  

2.          if (logger.isWarnEnabled()) {  

3.              logger.warn("Failed to write any response because the channel is not connected any more. Maybe the client has closed the connection? ");  

4.          }  

5.          return;  

6.      }  

优化代码后重新执行500并发压测,持续压测20分钟以上,少量 Connection timed out解决。

猜你喜欢

转载自blog.csdn.net/haoluojie/article/details/78764913