Azure web app service Azure Redis超时

Azure web app service Azure Redis超时,azure-web-app-service,stackexchange.redis,azure-redis-cache,Azure Web App Service,Stackexchange.redis,Azure Redis Cache,我有一个Asp.Net Azure web应用程序调用Azure Redis实例。我在Redis上总是超时。我得到的信息如下 inst: 1, mgr: Inactive, err: never, queue: 120, qu: 0, qs: 120, qc: 0, wr: 0, wq: 0, in: 65536, ar: 0, clientName: RD0004FFA37AA4, serverEndpoint: Unspecified/server.redis.cache.windows.

我有一个Asp.Net Azure web应用程序调用Azure Redis实例。我在Redis上总是超时。我得到的信息如下

 inst: 1, mgr: Inactive, err: never, queue: 120, qu: 0, qs: 120, qc: 0, wr: 0, wq: 0, in: 65536, ar: 0, clientName: RD0004FFA37AA4, serverEndpoint: Unspecified/server.redis.cache.windows.net:6380, keyHashSlot: 11524, IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=21,Free=8170,Min=200,Max=8191)
应用程序和redis都位于同一地区(美国东部2)

在错误消息中包含“in:65536”表示客户端内核套接字接收缓冲区中有65536字节已准备好处理,但客户端应用尚未解析

我在两个案例中看到了这一点:

  • 需要调整线程池设置()。但是,上面提供的错误消息并不表明这是一个问题。检查更多错误的抽样,以确保在其他情况下不会发生这种情况
  • 客户端CPU正在热运行。当CPU处于高位时,处理套接字接收事件的代码不会及时触发,因此处理代码不会解析内核缓冲区中等待的数据。检查您的客户端CPU历史记录。不过要小心——在azure度量中可能不会出现CPU的短暂峰值,因为CPU是在一个周期中捕获的(我认为每20秒一次)。如果峰值发生在这些样本之间并且很短,那么度量收集系统可能不会注意到它
    其他常见的和。

    我根据文档增加了工人踏板,因此这不是问题所在。可能是CPU,就像你说的,它不会出现在Azure度量中。将查看是否可以在那里找到任何内容。在超时时获取CPU使用率的一个可靠方法是捕获进程的转储。这是一个Azure应用程序服务,因此不确定我将如何做到这一点。现在我们不使用Redis来存储大型集合。请查看此处的说明(我认为它们仍然是准确的):谢谢,下次我看到错误时,将尝试使用它。自从我们把大型物体移出Redis,这一切就不再发生了。我也一样。在所有情况下,Busyin:值在每个超时中也是65536。我在客户端检查了我的CPU,结果只有20%。这让我们疯狂地想弄明白。几个月来一直工作得很好,现在每天都休息(@MPavlak请看下面的答案。Azure metrics中没有显示尖峰。最后,我们不得不将所有大型对象移出redis。您可以拥有大量密钥,但每个密钥的每个对象都必须很小。