天天看點

redis watchdog_Redis重新開機Redisson出錯:Unable to send command!

redis watchdog_Redis重新開機Redisson出錯:Unable to send command!

出現問題

最近在公司開發環境發現一個問題,是這樣的,開發環境的機器不斷打日志,由于日志的定時清理不及時,導緻磁盤滿了,然後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方法:

redis watchdog_Redis重新開機Redisson出錯:Unable to send command!

解決版本如下,如果遇到相同的問題可以選擇一個更新: 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