0
点赞
收藏
分享

微信扫一扫

【Azure Webjob + Redis】WebJob一直链接Azure Redis一直报错 Timeout Exception

JamFF 02-28 12:00 阅读 2

问题描述

运行在App Service上的Webjob连接Azure Redis出现Timeout Exception。 

错误截图:

【Azure Webjob + Redis】WebJob一直链接Azure Redis一直报错 Timeout Exception_客户端

参考Azure Redis对于超时问题的排查建议, 在修改Min Thread后,问题依旧。

流量突增和线程池配置

流量激增时,如果 ThreadPool  设置不佳,则可能导致对 Redis 服务器已发送但尚未在客户端上使用的数据的处理出现延迟。 



System.TimeoutException: Timeout performing EVAL, inst: 8, mgr: Inactive, queue: 0, qu: 0, qs: 0, qc: 0, wr: 0, wq: 0, in: 64221, ar: 0,
IOCP: (Busy=6,Free=999,Min=2,Max=1000), WORKER: (Busy=7,Free=8184,Min=2,Max=8191)


在上面的异常中,有几个需要注意的问题:


  • 请注意,在 IOCP 部分和 WORKER 部分,Busy 值大于 Min 值。 这种差异意味着 ThreadPool 设置需要调整。
  • 也可参看 in: 64221。 此值表示客户端的内核套接字层收到了 64,221 字节,但应用程序尚未读取这些字节。 这种差异通常意味着,应用程序(例如 StackExchange.Redis)从网络读取数据的速度没有服务器向你发送数据的速度快。

可以配置 ThreadPool,确保线程池在流量激增的情况下快速扩展。

那么,这个情况如何来缓解呢?

 

问题分析

在增加 ThreadPool 配置后,问题并没有得到缓解。查看Redis服务端的运行状态,一切正常。在排除代码服务端后,接下来就重点查看客户端状态。

查看App Service (Webjob) 的主体,它多个实例的CPU都有升高的情况,怀疑是当Webjob在某一个实例上运行的时候,消耗的CPU资源太高。因为Webjob的负载太高,一个实例的线程资源不够充足,所以需要多实例来处理。但是部署Webjob的时候,默认是单实例运行。

【Azure Webjob + Redis】WebJob一直链接Azure Redis一直报错 Timeout Exception_客户端_02

所以在部署的时候,需要手动设置为Multi Instance。

当修改WebJob的多实例,App Service上的Webjob不在报Redis Timeout Exception ( ... ... IOCP: (Busy=1,Free=999,Min=200,Max=1000), WORKDER: (Busy=576,Free=1471,Min=200,Max=2047) ... ... ) 。问题得到缓解!


 

 

参考资料

创建连续 Web 作业 : https://docs.azure.cn/zh-cn/app-service/webjobs-create#CreateContinuous

客户端故障排除 : https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-timeouts#traffic-burst-and-thread-pool-configuration

 

 [END] 

 

 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!



举报

相关推荐

0 条评论