【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤

问题描述

Azure Redis在使用的过程中,多次无规律的出现超时问题。抓取到客户端的异常错误后,想进一步的分析是何原因导致了如下异常呢?

复制代码
Timeout awaiting response (outbound=0KiB, inbound=0KiB, 5984ms elapsed, timeout is 5000ms), command=GET, 
next: GET n:AbpZeroMultiTenantLocalizationDictionaryCache,c:HMedia#zh-CN#0, 
inst: 0, qu: 0, qs: 498, aw: False, rs: ReadAsync, ws: Idle, in: 65536, 
serverEndpoint: xxxxxx-cache.redis.cache.chinacloudapi.cn:6380, 
mc: 1/1/0, mgr: 10 of 10 available, clientName: RD0003FF04A4F7, 
IOCP: (Busy=70,Free=930,Min=250,Max=1000), 
WORKER: (Busy=430,Free=32337,Min=400,Max=32767), v: 2.1.58.34321


No alt text provided for this image

官方文档对该类问题的解释为:


No alt text provided for this image

虽然这里Busy大于Min的Worker数量,表示目前客户端中所设置的ThreadPool值不够用,需要做一定的调整。但是这并不是Redis出现持续超时的根本原因,还是需要继续排查是否有某一方面达到了性能的限制呢?

问题分析

  • 第一步:分析Azure Redis的各种指标,查看在超时时间点是否有突增的尖峰。
  • 第二步:对比尖峰值,查看是否有突破当前定价层的阈值。
  • 第三步:查看Redis日志,发现不常规的点。使用各种已知的命令来辅助调查。
  • 第四步:如何来避免呢?

根据以上的四步原则。查看Azure Redis的指标,发现网络的读写出现尖峰。指标图类似于:


No alt text provided for this image

  • 缓存读取量:指定报告间隔期间,从缓存中读取的数据量,以每秒兆字节数(MB/秒)为单位。 此值来源于支持虚拟机的网络接口卡,该虚拟机托管缓存,但并不特定于 Redis。 此值对应于该缓存使用的网络带宽。如果要针对服务器端网络带宽限制设置警报,则可使用此 Cache Read 计数器来创建警报。
  • 缓存写入量:指定报告间隔期间,写入缓存中的数据量,以每秒兆字节数(MB/秒)为单位。 此值来源于支持虚拟机的网络接口卡,该虚拟机托管缓存,但并不特定于 Redis。 此值对应于从客户端发送到缓存的数据的网络带宽。

但是,只查看主节点的流量(注:Azure Redis有两个节点,一主一从),写入流量(409KB)与上图中的38.07MB却存在巨大的差别, 难到这是有连接直接操作从节点,而不通过主节点?


No alt text provided for this image

#根据以下步骤,就可以查看到从节点的网络写入,读取指标图:

1)在Azure Redis的门户中,打开Metrics页面, 选取name space为Redis Cache standard metrics


No alt text provided for this image

2)Metric 选取Cache Write (Instance Based)


No alt text provided for this image

3)添加Filter,Primary = False


No alt text provided for this image

4)启用Apply Splitting,按照端口细分


No alt text provided for this image

#如果发现从节点有大量的流量操作,已经严重影响主节点的正常指令执行

这个时候,就需要跟进一步的分析,是那些客户端连接到Redis?它们执行命令的次数有多少呢?它们执行了那些命令呢?

可以通过Redis-cli.exe工具连接到Redis后,通过 client list 当前的客户端连接情况和IP地址,已经通过numops查看当前连接已经执行的OPS。然后通过 monitor 指令实时监控命令的执行和所发出请求的IP地址

  1. 使用 redis-cli.exe连接到Azure Redis服务

    redis-cli.exe -h yourcachename.redis.cache.chinacloudapi.cn -p 6379 -a YourAccessKey

  2. 使用 client list 查看你连接数和 numops数 (实时)


    No alt text provided for this image

  3. 使用monitor指令监控所执行的命令(实时)


    No alt text provided for this image

#如何来避免其他非法的连接呢?对IP地址进行限制,设置白名单。或者启用内网访问 或者启用专用终结点


No alt text provided for this image

完

参考资料

排查 Azure Cache for Redis 超时问题:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-timeouts

将 Redis 命令行工具与 Azure Redis 缓存配合使用:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-redis-cli-tool#connect-using-the-redis-command-line-tool

Azure数据中心各资源的IP地址列表:https://www.microsoft.com/en-us/download/details.aspx?id=57062

Redis Private Endpoint:https://docs.microsoft.com/zh-cn/azure/azure-cache-for-redis/cache-private-link

Redis部署至VNET:https://docs.microsoft.com/zh-cn/azure/azure-cache-for-redis/cache-how-to-premium-vnet

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

分类: 【Azure Redis 缓存】

标签: Timeout awaiting response, redis-cli, Azure Redis
© 著作权归作者所有,转载或内容合作请联系作者

喜欢的朋友记得点赞、收藏、关注哦!!!

相关推荐
非优秀程序员7 小时前
第05章 播放器大战,暴风、快播与那一夜|《互联网产品恩仇录》
算法
非优秀程序员7 小时前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻8 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
沐晓时光8 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
文丑颜不良啊10 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang11 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪11 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息12 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼12 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发