2017-05-08 163 views
0

我在Azure的Redis的从Azure上的应用服务运行ASP.NET应用程序收到此错误不时进行操作与StackExchange.Redis 1.2.0.0什么可能是使用StackExchange.Redis超时异常的原因?

Timeout performing EXISTS bookmark:afad5065-29b1-48c7-8bbc-38ddcc9ab4e4type:1, inst: 1, mgr: Inactive, err: never, queue: 3, qu: 0, qs: 3, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, clientName: mywebapp, serverEndpoint: Unspecified/myapp.redis.cache.windows.net:6380, keyHashSlot: 8377, IOCP: (Busy=1,Free=999,Min=200,Max=1000), WORKER: (Busy=1,Free=32766,Min=200,Max=32767), Local-CPU: unavailable (Please take a look at this article for some common client-side issues that can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md) System.TimeoutException

连接具有以下配置:allowAdmin=true,ssl=true,abortConnect=false,connectTimeout=5000,syncTimeout=2000

当时客户端机器和Redis服务都没有遇到高负载。 已经阅读了关于timeouts已经但仍然不知道是什么造成他们在我的情况。将不胜感激任何帮助。

+0

您是否查看过针对Azure Redis的Azure文档?我会从这里开始:https://azure.microsoft.com/en-gb/blog/investigating-timeout-exceptions-in-stackexchange-redis-for-azure-redis-cache/ –

+0

你有流量到redis的净流量吗?所有端口都打开?您的IP位于Redis ACL上吗?如果配置。 – BWA

+0

@AndySinclair,是的,我已经尝试了那篇文章中的几条建议,但没有成功。我觉得我错过了这一切的一个微妙点。 – savbace

回答

1

超时可能是由client-sideserver-side性能问题造成的,因此您必须查看双方以确定会导致您的应用程序的原因。

有些事情要考虑:

  • 当客户端或服务器端PERF在蔚蓝的门户柜台看,要小心看一个相对较小的时间窗口(例如1小时)。这一点非常重要,因为当您缩小时间窗口时,门户网站会汇总这些值,并且这可以隐藏加载中的短时间高峰。
  • 许多性能计数器是使用采样而不是连续监视捕获的,因此可能会出现负载峰值没有足够长的时间在门户网站上显示。例如,如果CPU使用率每15秒记录一次,但CPU中的峰值仅为5秒,则可能在样本之间发生并且不会被看到。这就是StackExchange.Redis在即将抛出超时时试图捕获即时CPU使用率的原因。不幸的是,有些环境不允许访问系统性能计数器 - 因此超时错误中的“local-cpu:unavailable”消息。为了解决这个问题,您可以尝试在超时发生时捕获进程的转储。转储通常包含转储发生时的CPU信息。

我编制了一个best practices列表,帮助避免Redis常见的陷阱。

如果您仍然看不到任何明确的问题,请使用Azure打开支持案例,它们将帮助您进行调查。

相关问题