UnableToResolvePhysicalConnection异常

时间:2018-03-20 20:16:13

标签: azure-web-sites stackexchange.redis azure-redis-cache

我们正在调查连接到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才能解决问题?

其他想法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

StackExchange.Redis有一个已知问题,即使服务器运行正常,在某些情况下也无法重新连接。示例:https://github.com/StackExchange/StackExchange.Redis/issues/559

我怀疑你遇到了这类问题。您可以通过尝试从其他计算机连接到Redis来验证这一点。如果连接正常,那么你可能会遇到这个问题。重新创建ConnectionMultiplexer应该可以解决问题。如果您无法重新创建多路复用器,则重新启动客户端应该修复它。

我有一堆最佳实践可以帮助您构建代码来处理此类情况,包括一般最佳实践以及StackExchange.Redis特定建议。 https://gist.github.com/JonCole/925630df72be1351b21440625ff2671f