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. }