lettuce偶现Connection reset by peer异常排查

2024-01-01 10:38

本文主要是介绍lettuce偶现Connection reset by peer异常排查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

问题描述:

服务的异常日志中偶现查询超时1min

 

服务异常日志偶现连接断开

 

排查过程:

问:

这个明显网络超时,按照lettuce的默认超时配置,我这边看完lettuce的配置源码逻辑告诉你
另外需要以下几个信息:
1.是不是只有这一台服务节点有异常,所有的服务节点都有异常报错吗?
2.出现异常时的redis命令和参数,发生时所连接的redis node的ip
3.redis服务端监控没有异常(例如:网络,磁盘,慢日志)

答:

1.目前2个都有出现

2.。。。

3.保密

线索:

1.两台服务节点都有异常日志
2.不是频发,是偶现
3.redis服务监控看是没有异常
4.redis服务端慢日志是10ms与服务的异常对不上

lettuce keep alive原理分析:

redis4 SDK的保活逻辑

保活逻辑如下:
1.默认开启:autoReconnect参数
https://github.com/lettuce-io/lettuce-core/wiki/Client-Options


2.保活机制:断开连接的时候会尝试重连,断开连接之后并不是立即重连,而是根据一个延时重连的策略来延迟执行重连任务。
https://github.com/lettuce-io/lettuce-core/search?q=ConnectionWatchdog&type=code

3.重试时间间隔:0ms、1ms、2ms、4ms、16ms、指数递增最大Long.MAX_VALUE

https://github.com/lettuce-io/lettuce-core/blob/d3d50549dab9a22460e39946659dfa28738c7a25/src/main/java/io/lettuce/core/resource/ExponentialDelay.java

差异解释:

redis4使用的lettuce和之前的SDK的保活逻辑不一样
之前的jedis是发送ping来保活
lettuce是当连接断开触发reconnect
https://github.com/lettuce-io/lettuce-core/issues/861
这个issue有作者的解释意图
留个问题:其中有一个点不解断开连接的时候channelInactive会被调用,这个断开连接是netty怎么触发的??????

结论:

 

按照lettuce的逻辑,有以下case

1.网络连接通过防火墙,而防火墙有一定的超时机制,在网络连接长时间不传输数据时,会导致这个tcp连接被关闭

2.redis服务的链接数达到上限,会将最新的链接给关闭

3.redis服务宕机、重启

4.tcp数据长度不一致

5.没有设置keepalive

6.timeout时间设置太短

解决方案就是优化redis.conf的一些配置项:

timeout

tcp-keepalive

tcp-backlog

maxclients

 

至于第一个图片中的超时问题,是根据业务的场景需要配置超时时间,默认的60s不满足业务需求

默认配置:https://github.com/lettuce-io/lettuce-core/blob/34476f5cbe/src/main/java/io/lettuce/core/RedisURI.java

这篇关于lettuce偶现Connection reset by peer异常排查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/558996

相关文章

Docker启动异常

报错信息: failed to start daemon: Error initializing network controller: error creating default "bridge" network: cannot create network b8fd8c684f0ba865d4a13d36e5282fd694bbd37b243c7ec6c9cd29416db98d4b (d

Spring 内部类获取不到@Value配置值问题排查(附Spring代理方式)

目录 一、实例问题 1、现象 2、原因 3、解决 二、Spring的代理模式 1、静态代理(Static Proxy) 1)原理 2)优缺点 3)代码实现 2、JDK动态代理(JDK Dynamic Proxy) 1)原理 2)优缺点 3)代码实现 3、cglib 代理(Code Generation Library Proxy) 1)原理 2)优缺点 3)代码实

nginx 8051#0: *4 recv() failed (104: Connection reset by peer) while reading response header from u

环境    php7   nginx1.8.0    nginx   报错  500  GATWAY网关错误 2017/08/28 10:45:42 [error] 7975#0: *333 recv() failed (104: Connection reset by peer) while reading response header from upstream, clien

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查字符串值合法性 确认字符串格式 优化代码逻辑 增加输入验证和错误处理 总结 博主v:XiaoMing_Java 问题分析 javax.manag

Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接

在进行参数化读取时发现一个问题: 发现问题: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8081): Max retries exceeded with url: /jwshoplogin/user/update_information.do (Caused by NewConn

maven settings.xml无效排查过程

1.首先执行mvn help:effective-settings,查找当前maven仓库地址 2.错误信息 [ERROR] Error executing Maven. [ERROR] 2 problems were encountered while building the effective settings [FATAL] Non-parseable settings /Users/x

java编程:命令行输入的三个整数判断是否构成三角形,不能就抛异常。

写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,如果不能则抛出 异常IllegalArgumentException,显示异常信息“a,b,c不能构成三角形”, 如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常。 附源代码: package 异常;public class Sa

MapReduce 实践题:Web 访问日志分析与异常检测

文章目录 作业描述MapReduce 实践题:Web 访问日志分析与异常检测题目背景数据集说明任务要求输入数据示例输出数据示例实现步骤 解题思路1. 数据预处理2. 访问统计3. 异常检测4. 主方法5. 结果输出 作业描述 MapReduce 实践题:Web 访问日志分析与异常检测 题目背景 你被要求设计和实现一个基于 MapReduce 的大规模 Web 访问日志分析

异常处理的解决方案

package 异常;/** A:一个异常* B:二个异常的处理* a:每一个写一个try...catch* b:写一个try,多个catch* try{* ...* }catch(异常类名 变量名) {* ...* }* catch(异常类名 变量名) {* ...* }* ...* * 注意事项:* 1:能明确