Lettuce大量TIME_WAIT连接造成的java.net.BindException: Address already in use: no further information异常

问题描述

使用Lettuce进行大量高并发操作时,一段时间后会报错:java.net.BindException: Address already in use: no further information

奇怪的发现,客户端即本地有大量的TIME_WAIT连接,连接目标是redis端

只要在application.yml加上lettuce的配置,就没有问题了,不加就会出现上述问题:

从代码检查参数的使用方式:

首先分析Lettuce的初始化方法:

'''

private LettuceClientConfigurationBuilder createBuilder(Pool pool) {

if (pool == null) {

return LettuceClientConfiguration.builder();

}

return new PoolBuilderFactory().createBuilder(pool);

}

'''

发现加不加配置,走的路径不同:

不加配置的话,不使用连接池,就会造成大量的短时连接

如果加上连接池配置,就会使用连接池,连接会被重用,不会造成大量短时的连接来不及回收

另外发现,连接池的空闲最大数目和活动数目改成一样,比较正常,如果空闲数目小于活动数目,也会出现之前的问题,

估计连接回收的太快了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容