Azure Redis 超时

Azure Redis timeouts

我有一个 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)

app和redis在同一个区域(美国东部2)。

在您的错误消息中显示“in: 65536”表示客户端内核套接字接收缓冲区中有 65536 个字节已准备就绪待处理但尚未被客户端应用程序解析。

我见过两种情况:

  1. 需要调整线程池设置 (as described here)。但是,上面提供的错误消息并未表明这是一个问题。检查更多错误的样本,以确保在其他情况下不会发生这种情况。
  2. 客户端 CPU 运行 很热。当CPU为高电平时,处理socket接收事件的代码没有及时触发,所以处理代码没有解析内核缓冲区中的等待数据。检查您的客户 CPU 历史记录。不过要小心 - CPU 中的短暂峰值可能不会出现在 azure 指标中,因为 CPU 是在周期性周期(我认为每 20 秒)中捕获的。如果尖峰发生在这些样本之间并且很短,则指标收集系统可能不会注意到它。

其他常见client-side causes are documented here and common server-side errors are documented here.