Azure Redis在使用的过程当中,屡次无规律的出现超时问题。抓取到客户端的异常错误后,想进一步的分析是何缘由致使了以下异常呢?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
官方文档对该类问题的解释为:api
虽然这里Busy大于Min的Worker数量,表示目前客户端中所设置的ThreadPool值不够用,须要作必定的调整。可是这并非Redis出现持续超时的根本缘由,仍是须要继续排查是否有某一方面达到了性能的限制呢?缓存
根据以上的四步原则。查看Azure Redis的指标,发现网络的读写出现尖峰。指标图相似于:服务器
Cache Read
计数器来建立警报。可是,只查看主节点的流量(注:Azure Redis有两个节点,一主一从),写入流量(409KB)与上图中的38.07MB却存在巨大的差异, 难到这是有链接直接操做从节点,而不经过主节点?网络
1)在Azure Redis的门户中,打开Metrics页面, 选取name space为Redis Cache standard metrics工具
2)Metric 选取Cache Write (Instance Based)性能
3)添加Filter,Primary = Falsespa
4)启用Apply Splitting,按照端口细分命令行
这个时候,就须要跟进一步的分析,是那些客户端链接到Redis?它们执行命令的次数有多少呢?它们执行了那些命令呢?3d
能够经过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指令监控所执行的命令(实时)
[完]
排查 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