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

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www