当前位置: 首页 > news >正文

又一个线上偶发问题-系统短暂无法获取到Redis连接

概述


最近不知道咋回事,老是在线上遇到偶发的故障,它突然出现,又很快消失了

在2023年3月11下午差不多六点左右,我正在工位上喝着香味扑鼻的金骏眉红茶,突然接到了一个电话,拿起手机一看,是阿里云告警电话,马上接通,听到的是下面这么一句话:

Dubbo调用超时故障。

噗,已流入喉咙的红茶差点喷出来,赶紧打开阿里云的SLS日志平台,搜索了一下,发现A服务的RPC接口部分超时了,马上进入熟悉的线上定位套路。

  • 看流量是否陡增;
  • 看是否发版导致的;

还是用SLS日志平台查看流量,发现流量是平滑的,这一步花了10秒钟,然后再看最近A服务是否有发版,发现也没有,这一步花了我10秒。

20秒钟后,正当我想让运维重启A服务的时候,团队的一个同事过来跟说,没有报错了。我重新查了一下日志,确实没有继续报错了,就让同事继续盯着,我自己开始定位原因。

注意,这里由于故障时间非常短,且是一个A服务的读接口有问题,可以暂时不用去考虑影响面,肯定是非常小的。

然后就开始漫长且辛苦的定位之路了。通过查看错误日志,发现是A服务获取Redis连接超时了。

redis.clients.jedis.exceptions.JedisConnectionException : Failed connecting to xxxxxx.redis.rds.aliyuncs.com:kkkk
Caused by: java.net.SocketTimeoutException : connect timed out

而且报错的都是同一个业务接口,细看一下代码后,发现只是一个普通的get命令,就报错了。

image.png

在流量没怎么变化的情况下,只能从下面两个方面入手:

  • 当时A服务到底占用了Redis多少个连接;
  • A服务的Redis连接配置。

想看A服务的Redis连接情况,可以在阿里云的Redis监控平台上看。

image.png

从上图可以看到A服务(包含所有的Pod实例)在56分左右,最高占用了211个Redis连接,并不多,难道是A服务的Redis连接配置的不合理?

maxIdle:100
maxTotal:300

从配置上看是正常的,每一个A服务的Pod实例,当有100个Redis连接正在处理请求的时候,如果还忙不过来,会继续创建新的Redis连接,一直到300个。

才占用了211连接,不可能导致A服务拿不到Redis连接的,不会是211这个数字有什么玄乎的吧? 真的只能承受这么多?
于是去找了一下A服务在历史上,最高占用了多少个Redis连接,发现是:

image.png

是390个,这就有点搞不懂了,占用390个连接没问题,211个反而有问题? 没办法了,只能让运维去看一下是否有网络抖动情况,但是运维很快回复说:

一切正常,且当时整个Redis实例,运行状况是非常稳定的

😂😂😂😂😂😂😂😂,那到底啥情况? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

我有点想甩锅给阿里云了,便让运维提了一个工单,去问一下阿里云的售后,但得到的回复是:

当时无HA切换,无闪断,RT也没有异常变高的情况。

到此,我也没啥的好的办法了,只能跟老板说明一下情况,然后把这个问题先放一放,持续观察。

期间其实我还看了很多东西,只是没什么收获,大概看了如下几个方面:

  • 在56分的时候,这个Redis实例上的所有操作命令,是否有什么异常;
  • 为什么当当是那个业务接口触发了这个问题;
  • 对比了各个时间段,A服务和Redis实例的状态;
http://www.lryc.cn/news/40801.html

相关文章:

  • [ 系统安全篇 ] 拉黑IP - 火绒安全软件设置IP黑名单 windows使用系统防火墙功能设置IP黑名单
  • MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
  • 算法竞赛必考算法——动态规划(01背包和完全背包)
  • 基于深度学习的农作物叶片病害检测系统(UI界面+YOLOv5+训练数据集)
  • QT入门Item Views之QListView
  • GEE:计算1990-2021年的指数最大值和最小值,并根据最大最小值对每一副影像归一化
  • LeetCode KMP 算法
  • 全面剖析OpenAI发布的GPT-4比其他GPT模型强在哪里
  • leetcode——26. 删除有序数组中的重复项
  • 基于springboot垃圾分类网站设计实现【毕业论文、源码】
  • 计算机组成原理实验一(完整)
  • 【SSM】MyBatis(一.基础)
  • LInux指令之文件目录类
  • 【c++】:STL中vector的模拟使用及模拟实现
  • C++ STL:vector的使用方法及模拟实现
  • naive UI 的upload组件自定义手动上传图片的base64位
  • 信创办公–基于WPS的PPT最佳实践系列(表格和图标常用动画)
  • Spring Bean实例化和初始化的过程
  • WorkTool企微机器人接入智能问答
  • C导入正则库问题
  • 尚融宝05-Node.js入门
  • 「SAP ABAP」OPEN SQL(八)【WHERE语句大全】
  • Ribbon负载均衡的原理(源码分析)
  • 用sql计算两个经纬度坐标距离(米数互转)
  • C语言详解KMP算法
  • redis在window上安装与自启动
  • 字符串匹配【BF、KMP算法】
  • Leetcode.1616 分割两个字符串得到回文串
  • 剑指 Offer II 033. 变位词组
  • spring-cloud-sentinel ---流控算法---review