记一次应用访问Redis超时的案例分析

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 记一次应用访问Redis超时的案例分析

问题描述

某产品线应用访问Redis出现超时(超时时间配置的是2000ms),异常信息:

分析过程

查看监控数据

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

系统监控指标

CPU、内存、Load、磁盘指标数据都是正常的,所以系统资源是足够的。

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实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1天前
|
缓存 供应链 NoSQL
Redis应用—4.在库存里的应用
本文介绍了社区电商系统库存模块的设计与实现,涵盖以下关键点:库存模块设计、库存缓存分片和渐进式同步方案、下单库存扣减方案、商品库存设置流程与异步落库、库存扣减逻辑、库存查询,这些设计确保了库存管理在高并发场景下的高效性和数据一致性。
Redis应用—4.在库存里的应用
|
3天前
|
缓存 NoSQL 前端开发
Redis应用—2.在列表数据里的应用
本文介绍了基于数据库和缓存双写的分享贴功能设计,包括:基于数据库 + 缓存双写的分享贴功能、查询分享贴列表缓存时的延迟构建、分页列表惰性缓存方案、用户分享贴列表数据按页缓存实现精准过期控制、用户分享贴列表的分页缓存异步更新、数据库与缓存的分页数据一致性方案、热门用户分享贴列表的分页缓存失效时消除并发线程串行等待锁的影响。总结:该设计通过合理的缓存策略和异步处理机制,有效提升了系统性能,降低了内存占用,并确保了数据的一致性和高可用性。
Redis应用—2.在列表数据里的应用
|
7天前
|
缓存 NoSQL 关系型数据库
Redis应用—1.在用户数据里的应用
本文主要介绍了社区电商的业务闭环及Redis缓存架构中遇到的典型生产问题及其解决方案。通过介绍的设计和优化,社区电商平台能够在高并发读取和少量写入的情况下,保持高性能和数据一致性。
Redis应用—1.在用户数据里的应用
|
2天前
|
缓存 NoSQL 关系型数据库
Redis应用—3.在购物车里的应用
本文详细介绍了社区电商购物车的设计与实现,涵盖多个关键方面:读多写多场景分析、复杂缓存与异步落库、异步落库问题处理、阈值检查与重复加入逻辑、多线程并发问题解决、查询更新功能、选中提交功能。
|
NoSQL Redis
redis外部访问
1、redis的搭建这里就不做描述的了,可以参考我的另外一个博客。 http://www.cnblogs.com/ll409546297/p/6993778.html 2、说明一下我们在其他服务器上面不能访问自己搭建的redis服务器的原因   1)bind 127.0.0.1 因为redis.conf中默认是配置的bind 127.0.0.1。
1327 0
|
27天前
|
缓存 NoSQL 中间件
Redis,分布式缓存演化之路
本文介绍了基于Redis的分布式缓存演化,探讨了分布式锁和缓存一致性问题及其解决方案。首先分析了本地缓存和分布式缓存的区别与优劣,接着深入讲解了分布式远程缓存带来的并发、缓存失效(穿透、雪崩、击穿)等问题及应对策略。文章还详细描述了如何使用Redis实现分布式锁,确保高并发场景下的数据一致性和系统稳定性。最后,通过双写模式和失效模式讨论了缓存一致性问题,并提出了多种解决方案,如引入Canal中间件等。希望这些内容能为读者在设计分布式缓存系统时提供有价值的参考。感谢您的阅读!
118 6
Redis,分布式缓存演化之路
|
3月前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
200 85
|
5月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
106 6
|
2月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
|
2月前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。