zoukankan      html  css  js  c++  java
  • 【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

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

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

    问题分析

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

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

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

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

     

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

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

    2)Metric 选取Cache Write (Instance Based)

    3)添加Filter,Primary = False

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

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

    这个时候,就需要跟进一步的分析,是那些客户端连接到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数 (实时)

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

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

    [完]

    参考资料

    排查 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

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

  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/lulight/p/15046966.html
Copyright © 2011-2022 走看看