【问题标题】:What could be a reason of timeout exception using StackExchange.Redis?使用 StackExchange.Redis 超时异常的原因可能是什么?
【发布时间】:2017-05-09 06:46:35
【问题描述】:

我不时在 Azure 应用服务上运行的 ASP.NET 应用中使用 StackExchange.Redis 1.2.0.0Azure 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: @987654321@) System.TimeoutException

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

客户端机器和 Redis 服务在这段时间内都没有遇到高负载。 已经阅读过timeouts,但仍然不知道是什么导致了我的情况。将不胜感激。

【问题讨论】:

  • 您是否查看过专门针对 Azure Redis 的 Azure 文档?我将从这里开始:azure.microsoft.com/en-gb/blog/…
  • redis 有净流量吗?所有端口都打开了吗?你的 IP 在 Redis ACL 上吗?如果已配置。
  • @AndySinclair,是的,我已经尝试了该文章中的一些建议,但没有成功。我觉得我在这一切中遗漏了一些微妙的点。

标签: c# azure redis stackexchange.redis azure-redis-cache


【解决方案1】:

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

需要考虑的一些事项:

  • 在 Azure 门户中查看客户端或服务器端性能计数器时,请注意查看相对较小的时间窗口(例如 1 小时)。这很重要,因为当您缩小到较长时间窗口时,门户会聚合值,这可以隐藏负载中的短暂峰值
  • 许多性能计数器是使用采样而不是连续监控来捕获的,因此负载峰值可能不够长,无法显示在门户中。例如,如果每 15 秒记录一次 CPU 使用率,但 CPU 的峰值仅持续 5 秒,则它可能发生在样本之间并且不会被看到。这就是 StackExchange.Redis 在即将引发超时时尝试捕获瞬时 CPU 使用率的原因。不幸的是,某些环境不允许访问系统性能计数器 - 因此超时错误中的“local-cpu:不可用”消息。为了解决这个问题,您可以尝试在超时发生时捕获进程的转储。转储通常包含进行转储时的 CPU 信息。

我编制了一份best practices 列表,有助于避免 Redis 中的常见陷阱。

如果您仍然没有看到任何明确的问题迹象,请向 Azure 提出支持案例,他们将帮助您进行调查。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多