Redis重启Redisson出错:Unable to send
出现问题
最近在公司开发环境发现一个问题,是这样的,开发环境的机器不断打日志,由于日志的定时清理不及时,导致磁盘满了,然后redis由于没法持久化,所以就连不上了,这个时候发现之后我们重启了redis,然后就回家了。
第二天应用在使用redisson的分布式锁的时候就发现错误:org.redisson.client.WriteRedisConnectionException: Unable to send command!
,就是分布式锁的命令无法执行,导致许多业务都出现问题。
一开始以为是redis出问题,检查了一下,并重启了一下,还是有问题,最后重启某个微服务之后发现没问题了,到这里定位到是redisson连接管理出问题了,但是具体如何解决还一脸懵逼。
解决问题
看了错误堆栈:
Caused by: java.nio.channels.ClosedChannelException: null
at io.netty.channel.AbstractChannel$AbstractUnsafe.write(...)(Unknown Source)
就知道关闭通道的时候出问题,但是具体什么原因不知道,搜索引擎老师也不知所措
最终,在redisson的github仓库的issue中找到了答案:
The connection not reconnect #1811
刚好我们使用的redisson版本也是3.9.1
,这个issue发生提到的错误,问题的出现基本和我遇到的一致,并且在Fixed - connection is not reconnected #1811中解决了,所以,这样子,升级!搞定!
问题总结
问题的主要原因是:在redis出问题之后,watchdog发现连接无效之后,然后打印了一个警告日志之后,就没法有自动重连了,导致继续使用该连接的时候出问题,问题解决,ConnectionWatchdog.channelInactive.tryReconnect方法:
redisson-issue-1811.png解决版本如下,如果遇到相同的问题可以选择一个升级:
redisson-3.11.3、redisson-3.11.2、redisson-3.11.1、redisson-3.11.0、redisson-3.10.7、redisson-3.10.6、redisson-3.10.5、redisson-3.10.4、redisson-3.10.3、redisson-3.10.2、redisson-3.10.1、redisson-2.15.2、redisson-2.15.1
欢迎关注【Java In Mind】:
qrcode_for_gh_69aef67cad36_258.jpg