长时间无响应导致生产环境Redis连接被服务器强制断开,如何解决?
- 内容介绍
- 文章标签
- 相关推荐
本文共计978个文字,预计阅读时间需要4分钟。
上个月线上生产环境出现几个异常接口响应,查看生产日志后发现,如错误+Redis客户端端使用的是+SpringBoot+默认的+Lettuce+客户端,并且没有指定连接池,出现+connection reset by peer+这个问题。
上个月线上生产环境有几个接口出现异常响应,查看生产日志后发现,如下错误
线上Redis客户端使用的是SpringBoot默认的Lettuce客户端,并且没有指定连接池,connection reset by peer这个错误是当前客户端连接在不知情的情况下被服务端断开后产生,也就是说当前客户端Redis连接已经在服务端断开了,但是客户端并不知道,当请求进来时,Lettuce继续使用当前Redis连接请求数据时,就会提示connection reset by peer。
一般情况下服务端断开连接都会发送FIN包通知客户端,但是当我在用tcpdump监控服务端tcp传输后,发现Redis服务端tcp连接在无活动一段时间,比如10分钟后会收到来自客户端的RST包,然而我的客户端也在使用wireshark抓包中,并没有发送给服务端RST包,这就很奇怪了,猜测这里是可能是服务器对tcp连接的限制导致,对长时间无活动的tcp连接强制断开处理。所以这里线上环境Redis连接偶尔产生connection reset by peer错误是被我复现出来了。
既然这里知道是Redis连接长时间无活动后被断开导致的bug,那怎么解决?
博主一开始以为重试可以解决,但是发现事情没有想象的简单。
本文共计978个文字,预计阅读时间需要4分钟。
上个月线上生产环境出现几个异常接口响应,查看生产日志后发现,如错误+Redis客户端端使用的是+SpringBoot+默认的+Lettuce+客户端,并且没有指定连接池,出现+connection reset by peer+这个问题。
上个月线上生产环境有几个接口出现异常响应,查看生产日志后发现,如下错误
线上Redis客户端使用的是SpringBoot默认的Lettuce客户端,并且没有指定连接池,connection reset by peer这个错误是当前客户端连接在不知情的情况下被服务端断开后产生,也就是说当前客户端Redis连接已经在服务端断开了,但是客户端并不知道,当请求进来时,Lettuce继续使用当前Redis连接请求数据时,就会提示connection reset by peer。
一般情况下服务端断开连接都会发送FIN包通知客户端,但是当我在用tcpdump监控服务端tcp传输后,发现Redis服务端tcp连接在无活动一段时间,比如10分钟后会收到来自客户端的RST包,然而我的客户端也在使用wireshark抓包中,并没有发送给服务端RST包,这就很奇怪了,猜测这里是可能是服务器对tcp连接的限制导致,对长时间无活动的tcp连接强制断开处理。所以这里线上环境Redis连接偶尔产生connection reset by peer错误是被我复现出来了。
既然这里知道是Redis连接长时间无活动后被断开导致的bug,那怎么解决?
博主一开始以为重试可以解决,但是发现事情没有想象的简单。

