当前位置:网站首页 > R语言数据分析 > 正文

redis连接超时该如何解决(redis连接超时异常)



某产品线应用访问Redis出现超时(超时时间配置的是2000ms),异常信息
在这里插入图片描述

通过监控数据,了解应用运行状态以确定应用出现问题时间点、是否过载、依赖服务是否过载等基本信息。

在这里插入图片描述

在这里插入图片描述
FullGC过于频繁及耗时较长的情况下会造成应用阻塞住,从图中看FullGC发生的频次是正常的,一次FullGC耗时也是正常的,所以FullGC不是造成SocketTimeoutException的原因。

在这里插入图片描述
从Redis控制台及阿里云杜康上该Redis实例的CPU使用率、内存使用率等指标都是正常的。

分析了每小时、每分钟及每秒钟异常出现的次数,发现异常具有一定周期性:每个小时在固定的几个时间点会集中出现,出现的时候会集中在相邻的几秒钟内。

统计了应用集群中其他机器的异常规律,每台机器出现异常的规律是一致的:不出现都不出现,要出现一起出现。

我们统计了异常日志中,所有超时的key,然后单独访问这些key,并没有任何发生超时的情况。

通过上面的分析,很有可能是应用侧在相对集中的时间点访问了同一个Redis节点,在该Redis节点产生了慢查询,进而阻塞掉了正常的请求Redis的命令。

在这里插入图片描述

slowlog

最先想到是Redis慢查询,有些应用卡慢的场景到这里可以找到线索,遗憾的是slowlog并没有看到应用端发过来的命令。

在这里插入图片描述

Redis单节点info all

接着是Redis单节点的监控指标,一些CPU高、卡慢的场景在这里找到线索,经过对比确实有个节点avgRT比其他节点高很多。下面是两个不同节点的数据:

在这里插入图片描述
avgRT=45的是节点8,初步判定节点8是问题节点。

定位redis节点

我们初步判定节点8是问题节点,超时的key是否打到了这个节点呢?阿里云redis自研了info key指令:查询key所属的slot和db。

在这里插入图片描述
可惜的是这个版本的Redis返回的node_index跟控制台上实例拓扑图的node index不一致。
我们只好去每个Redis节点通过tcpdump抓包,对抓包里的key执行info key <biz_key>来核对node_index:5到底是哪个节点,最终定位到了超时key都是打在了节点13.

定位异常key

是对哪些key的访问阻塞住了Redis,进而造成其他命令的超时呢?首先想到的是大key的影响。

bigkeys

在这里插入图片描述

tcpdump定位大key影响

在redis节点132进行tcpdump抓包且过滤大key

 
  

在应用侧过滤日志中的异常信息

 
  

当应用侧出现SocketTimeoutException的时候,redis节点上的key是需要我们引起关注的,最后将定位的key提供给研发

排查此类问题,几个需要关注的点

  • 统计超时key,及key对应的redis节点
  • Redis slowlog 慢查询
  • Redis单节点info all指标对比不同节点服务情况
  • Redis bigkeys
  • 还有一个注意的点是Redis hotkeys

在这里插入图片描述

到此这篇redis连接超时该如何解决(redis连接超时异常)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • cruise软件(Cruise软件)2025-09-18 09:45:09
  • druid是干嘛的(druid是什么)2025-09-18 09:45:09
  • ueditor官网打不开(ueditorapi文档)2025-09-18 09:45:09
  • pycharm怎么删除虚拟环境(pycharm conda 虚拟环境)2025-09-18 09:45:09
  • Pathlib文档(pathlib mkdir)2025-09-18 09:45:09
  • 密码库下载(miracl密码库)2025-09-18 09:45:09
  • prp两次离心法(prp两次离心法操作步骤)2025-09-18 09:45:09
  • 编译lib文件(编译libcurl)2025-09-18 09:45:09
  • uchar i,j;什么意思(uchar flag是什么意思)2025-09-18 09:45:09
  • orcale 时间查询(orcale 时间查询有分秒)2025-09-18 09:45:09
  • 全屏图片