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

【实践】应用访问Redis突然超时怎么处理?

目录标题

  • 问题描述
  • 分析过程
    • 查看监控数据
    • 系统监控指标
    • JVM监控指标
    • Redis监控指标
    • 分析应用异常
    • 单机异常规律
    • 集群异常规律
    • 统计超时的key
  • 初步结论
  • 验证结论
    • 访问Redis链路
      • slowlog
      • Redis单节点info all
      • 定位redis节点
      • 定位异常key
        • bigkeys
        • tcpdump定位大key影响
  • 经验总结

问题描述

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

分析过程

查看监控数据

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

系统监控指标

在这里插入图片描述

JVM监控指标

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

Redis监控指标

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

分析应用异常

分析异常日志,首先需要弄明白的是应用抛异常时候执行的业务逻辑及异常本身含义;异常在本机出现的频次情况,是否存在规律性;及异常在该应用的集群上的规律性。
除了访问Redis异常,应用依赖得其他服务没有超时情况。

单机异常规律

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

集群异常规律

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

统计超时的key

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

初步结论

通过上面的分析,很有可能是应用侧在相对集中的时间点访问了同一个Redis节点,在该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

tcpdump -i any tcp and dst port 3048 -A -nn | grep -E '大key1|大key2|大key3|......'

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

tail -f error.log | grep 'SocketTimeoutException'

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

经验总结

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

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

在这里插入图片描述

相关文章:

【实践】应用访问Redis突然超时怎么处理?

目录标题 问题描述分析过程查看监控数据系统监控指标JVM监控指标Redis监控指标分析应用异常单机异常规律集群异常规律统计超时的key 初步结论验证结论访问Redis链路slowlogRedis单节点info all定位redis节点定位异常keybigkeystcpdump定位大key影响 经验总结 问题描述 某产品线…...

Spring Cloud Alibaba核心组件Nacos/Seata/Sentinel

文章目录 Spring Cloud Alibaba介绍Spring Cloud 微服务体系Spring Cloud Alibaba 定位 注册配置中心--Nacos服务治理架构注册中心原理 Nacos介绍Nacos 的关键特性1.服务注册和发现2.动态配置服务3.实时健康监控4.动态DNS服务5.易于集成&#xff1a; Nacos入门示例服务注册与发…...

Ubuntu搭建FTP服务器

1. 首先&#xff0c;我们需要安装和配置xinetd&#xff0c;安装的具体命令如下&#xff1a; sudo apt-get install xinetd 2. 新建tftp工作目录&#xff0c;并添加读、写、执行权限&#xff08;没有权限后面无法正常访问该文件夹&#xff09;&#xff0c;如下图所示。 3. 安装…...

Redis在单线程下删除大Key会发生什么?怎么删除大Key?

大Key的定义 大Key是指在缓存系统&#xff08;如Redis&#xff09;或分布式存储中&#xff0c;单个键&#xff08;Key&#xff09;对应的数据量非常大&#xff0c;通常存储的是大块数据结构&#xff0c;例如包含大量数据的哈希表、列表、集合或有序集合。这种大Key往往会对系统…...

《Exploit temporal cues in multi-camera 3D object detection》论文泛读

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId4666749915775385601eId2491528568128599808 针对单帧数据含有的信息太少的问题&#xff0c;提出了一种新的方法&#xff0c;BEVDet4D&#xff0c;这种方法可以访问时间线索&#xff0c;并且取得了较好的表现&#xff…...

十四、centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

&#x1f33b;&#x1f33b;目录&#x1f33b;&#x1f33b; 一、 centos7 yum报错&#xff1a;cannot find a valid baseurl for repo:base/7/x86_64二、分析错误三、解决方案3.1 检查网络连接3.2 检查DNS设置3.3 检查YUM仓库配置3.3.1 使用官方CentOS镜像配置3.3.2 使用阿里云…...

qt使用对数坐标的例子,qchart用QLogValueAxis坐标不出图解决

硬件&#xff1a;ThinkPad T15 系统&#xff1a;win10 专业版 qt版本&#xff1a;Qt 5.14.1 &#xff0c; QtCreator 4.11.1 软件界面放了一个QPushButton&#xff0c;一个QVBoxLayout&#xff0c;如下&#xff1a; 主要代码如下&#xff0c;我添加了两条曲线&#xff0c;…...

Python 爬虫入门 - 爬虫 requests 请求

在当今互联网时代,数据的获取变得尤为重要,而网络爬虫作为自动化获取数据的一种方式,受到了越来越多编程爱好者和数据分析人员的青睐。Python 语言以其简洁的语法和丰富的库,成为了实现网络爬虫的首选工具。其中,requests库是一个非常流行且强大的工具,用于发送 HTTP 请求…...

flink中startNewChain() 的详解

在 Apache Flink 中&#xff0c;startNewChain() 是一个与算子链&#xff08;operator chaining&#xff09;相关的方法。与 disableChaining() 类似&#xff0c;它允许开发者控制算子链的创建方式&#xff0c;但 startNewChain() 的作用是从当前算子开始创建一个新的算子链&am…...

uniapp 苹果安全域适配

一、使用原生占位&#xff08;仅App端支持&#xff09; //在manifest.json 文件中 app-plus 中配置 "safearea": { "background": "#FFFFFF", "bottom": { "offset": "auto" } } 二、不使用原生占位 //&…...

linux使用命令行编译qt.cpp

步骤&#xff1a; mkdir qttestcd qttestvim hello.cpp #include <QApplication> #include <QDialog> #include <QLabel> int main(int argc,char* argv[]) {QApplication a(argc,argv);QLabel label("aaa");label.resize(100,100);label.show()…...

Ubuntu 22.04 LTS 上安装 Docker

单台机器安装docker环境&#xff0c;是为了后面安装open-webui&#xff0c;环境安装比较简单&#xff0c;没有难点&#xff0c;但一定要按步骤走&#xff0c;否则还是会遇到一些问题的。 第 1 步&#xff1a;更新软件包并安装必要软件 运行以下命令&#xff0c;更新软件包索引…...

2024秋季云曦开学考

web ezezssrf 打开环境&#xff0c;代码审计 看起来有点多&#xff0c;要绕过五层 第一层&#xff1a;存在弱比较&#xff0c;使用数组或0e绕过 yunxi[]1&wlgf[]2 yunxis878926199a&wlgfs155964671a 第二层&#xff1a;存在强比较&#xff0c;此处使用string限制…...

基于STM32与Qt的自动平衡机器人:从控制到人机交互的的详细设计流程

一、项目概述 目标和用途 本项目旨在开发一款基于 STM32 控制的自动平衡机器人&#xff0c;结合步进电机和陀螺仪传感器&#xff0c;实现对平衡机器人的精确控制。该机器人可以用于教育、科研、娱乐等多个领域&#xff0c;帮助用户了解自动控制、机器人运动学等相关知识。 技…...

C#使用ZipFile的方法CreateFromDirectory

由于现在数据越来越大,虽然磁盘的大小也在增加,但是数据增加的速度是远超过磁盘的增加速度。 因为数据是一种思想的表现,特别是ChatGPT的AI出现,导致很多数据无限地使用机器化地产生,所以数据压缩还是很常有的事情,毕竟压缩之后可以减少磁盘空间的占用。 在C#里有一个专…...

Redis 哨兵模式的选举算法是什么?

Redis 哨兵模式中的选举算法主要用于在主节点出现故障时,从多个 Sentinel 节点中选出一个领导者(Leader)来执行故障转移操作。 Redis 哨兵的选举算法基于 Raft 算法的简化版本,但不完全等同于标准的 Raft 算法。以下是其主要过程: 一、发现主节点故障 当一个 Sentinel …...

Linux shell编程学习笔记80:gzip命令——让文件瘦身

0 引言 在 Linux shell编程学习笔记76&#xff1a;tar命令——快照 & 备份&#xff08;上&#xff09;-CSDN博客 Linux shell编程学习笔记77&#xff1a;tar命令——快照 & 备份&#xff08;下&#xff09;_linux 系统快照-CSDN博客 Linux shell编程学习笔记78&am…...

【字幕】恋上数据结构与算法之01为什么要学习数据结构与算法

视频地址&#xff1a;请查看01为什么要学习数据结构与算法_哔哩哔哩_bilibili 同志们好&#xff0c;我是小码哥的mj李明杰。非常欢迎大家来学习链上数据结构与算法&#xff0c;从今天开始呢就由我来带大家一起来学习和掌握这个数据结构与算法啊。在正式学习之前我们先来看一下…...

120页ppt丨集团公司战略规划内容、方法、步骤及战略规划案例研究

响应会员需求&#xff0c;晓零分享一份经典资料《120页ppt集团公司战略规划内容、方法、步骤及战略规划案例研究》&#xff0c;欢迎进入星球下载学习。 以下是对企业战略规划三个阶段八个步骤的详细解析&#xff1a; 一、阶段一&#xff1a;内外分析 项目启动和前期准备&…...

滚雪球学SpringCloud[2.3]:服务发现与负载均衡详解

全文目录&#xff1a; 前言1. Ribbon的使用与配置1.1 Ribbon 概述Ribbon 的核心功能&#xff1a; 1.2 Ribbon 的基本使用1.2.1 引入 Ribbon 依赖1.2.2 配置 RestTemplate 与 Ribbon1.2.3 示例&#xff1a;通过 Ribbon 调用服务 1.3 Ribbon 的配置选项 2. Ribbon的负载均衡策略2…...

基于PWM舵机与NeoPixel的万圣节互动蝙蝠制作全解析

1. 项目概述&#xff1a;一个会动的万圣节蝙蝠又快到万圣节了&#xff0c;想给家里的装饰来点不一样的“活物”吗&#xff1f;每年都摆静态的南瓜灯和蜘蛛网&#xff0c;总觉得少了点气氛。今年我琢磨着&#xff0c;不如自己动手做一个能扑腾翅膀、眼睛还会发光的机械蝙蝠&…...

【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit

目录 一、一个自然的想法 二、类型转换运算符的基本语法 写法 使用 三、隐式转换的风险 问题1&#xff1a;意外的不希望发生的转换 问题2&#xff1a;多个转换路径的歧义 问题3&#xff1a;与构造函数隐式转换叠加导致混乱 四、explicit&#xff1a;禁止隐式转换 语法…...

Agent Framework 中的 Workflow Composition

在前面的文章中&#xff0c;我们已经介绍了 Agent Framework 中如何定义流程节点&#xff0c;以及 Workflow 的流式执行事件。 如果你对这些概念还不太熟悉&#xff0c;可以先回顾上一篇文章&#xff1a; Agent Framework 定义流程节点以及节点的流式输出 这一节我们来介绍 Wor…...

构建高质量代码数据池:从数据堆到模型营养基的进化之路

1. 项目概述&#xff1a;一个为代码生成模型量身定制的数据池最近在折腾大语言模型&#xff0c;特别是代码生成这块&#xff0c;发现一个挺有意思的现象&#xff1a;很多开发者手头有不错的代码数据集&#xff0c;但直接丢给模型训练&#xff0c;效果总是不尽如人意。要么是数据…...

CursorTouch/Web-Use:用JavaScript在桌面端模拟移动端触摸交互

1. 项目概述&#xff1a;当光标变成你的手指你有没有想过&#xff0c;在电脑上浏览网页时&#xff0c;如果能像在手机上那样&#xff0c;直接用手指滑动、点击、缩放&#xff0c;体验会不会更流畅&#xff1f;尤其是在处理一些需要精细操作或快速浏览长文档的场景时&#xff0c…...

量子优化基准测试库QOBLIB:原理与应用解析

1. 量子优化基准测试库QOBLIB概述量子计算在组合优化领域展现出突破经典计算极限的潜力&#xff0c;但如何系统评估量子算法的实际性能一直是研究难点。2025年发布的QOBLIB&#xff08;Quantum Optimization Benchmarking Library&#xff09;填补了这一空白&#xff0c;成为首…...

量子优化算法在组合优化问题中的应用与性能分析

1. 量子优化算法与组合优化问题概述组合优化问题广泛存在于物流调度、网络设计、芯片布局等工业场景中&#xff0c;其核心挑战在于从离散解空间中高效寻找最优解。传统经典算法在面对NP难问题时往往面临计算复杂度爆炸的困境。量子优化算法通过量子叠加和纠缠等特性&#xff0c…...

复杂会场巡检机器人路径规划【附代码】

✨ 长期致力于路径规划、RRT~*算法、人工势场法、自动巡检研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;提出基于安全边界与朝向合力场随机游走的改…...

5分钟掌握Diablo Edit2:暗黑破坏神II角色编辑器的终极指南

5分钟掌握Diablo Edit2&#xff1a;暗黑破坏神II角色编辑器的终极指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神II的刷装备烦恼吗&#xff1f;想要快速体验不同build的乐趣…...

告别Keil!用Arduino生态玩转国产GD32芯片的3个实战技巧

用Arduino生态解锁GD32开发的三大高阶玩法 在嵌入式开发领域&#xff0c;Keil和IAR等传统工具链长期占据主导地位&#xff0c;但它们的封闭生态和复杂配置流程正在被更开放的解决方案挑战。GD32作为国产MCU的优秀代表&#xff0c;其与Arduino生态的融合为开发者提供了一条高效率…...