我们正在调查连接到Azure Redis缓存(C2级标准)的Azure上的api问题,因为从昨天晚上到今天清晨(将近12个小时),我们已经看到了数百次像这样的redis超时
执行GET超时????????:FV:提供者:天气,inst:1,mgr: 不活动,错误:从不,队列:318,qu:2,qs:316,qc:0,wr:1,wq:1, in:65536,ar:0,clientName:Items,serverEndpoint:?????????:6380, keyHashSlot:1586,IOCP :( Busy = 1,Free = 999,Min = 8,Max = 1000),WORKER: (忙碌= 66,免费= 32701,最小= 300,最大值= 32767
在夜间我们没有得到太多的访问,但错误仍然是直到今天9点左右,redis队列中的项目高达7000,但我们api的流量在夜间非常低。
白天一切都还不错,除了今天下午一个小时,当我们遇到访客高峰时,问题又出现了。我们一直在寻找很多指标,缓存读/写操作与往常一样,缓存命中,cpu,内存......一切都还可以。
即使其他API使用相同的redis缓存实例,也不会遇到此问题。出于这个原因,我们认为Azure Redis的大小是正确的,否则其他API将遇到同样的问题。
查看日志,我们发现在超时错误开始前两分钟,我们有超过200个例外,如此
StackExchange.Redis.RedisConnectionException: GET上的UnableToResolvePhysicalConnection StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T](消息 消息,ResultProcessor
1 processor, ServerEndPoint server) at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor
1处理器,ServerEndPoint服务器)at StackExchange.Redis.RedisDatabase.StringGet(RedisKey key,CommandFlags 标志)
我们猜这两个错误是相关的。但我们不知道我们是做错了什么还是天蓝色的问题。可能是StackExchange.Redis连接在UnableToResolvePhysicalConnection异常后被破坏了,我们必须重启API才能解决问题?
其他想法?
感谢您的帮助!
答案 0 :(得分:1)
StackExchange.Redis有一个已知问题,即使服务器运行正常,在某些情况下也无法重新连接。示例:https://github.com/StackExchange/StackExchange.Redis/issues/559
我怀疑你遇到了这类问题。您可以通过尝试从其他计算机连接到Redis来验证这一点。如果连接正常,那么你可能会遇到这个问题。重新创建ConnectionMultiplexer应该可以解决问题。如果您无法重新创建多路复用器,则重新启动客户端应该修复它。
我有一堆最佳实践可以帮助您构建代码来处理此类情况,包括一般最佳实践以及StackExchange.Redis特定建议。 https://gist.github.com/JonCole/925630df72be1351b21440625ff2671f