【发布时间】:2014-07-23 00:20:54
【问题描述】:
简短版:Azure 队列请求超时率突然、剧烈且看似永久地增加的原因是什么?
在这里提供所有可能相关的细节是很困难的,但这是一个开始:
这是一个 Azure 应用程序 (SDK v2.0),其 WCF 服务将工作请求放在一个队列中(每天大约 10 万次调用)和几个处理队列的工作角色。我们使用最新的 .NET 代理 (3.3.38) 进行了 New Relic 监控。
我们在几天前部署的最新版本中遇到了一个问题 - 在它正常运行大约 24 小时后,突然之间,当我们的工作角色获取消息时,我们开始看到超时率大大增加来自队列,以及吞吐量的灾难性下降(我们的应用程序现在使用 40 个工作人员几乎无法跟上它自己的队列,而通常只有 2 个工作人员就可以了!)自从超时开始,他们没有表现出放松的迹象,自它开始发生以来一直保持相同的速度。
来自 New Relic 的几张图片来说明:
虽然这些信息不足以提供一个好的答案,但我只是想弄清楚我可以从哪里开始寻找。我已经收到了 New Relic 和 Microsoft 的支持票,但我们也在尝试自己进行调查。这可能是节流吗?我的队列处理器工作人员角色中的某种资源耗尽?我们没有看到 WCF 服务的负载增加,并且我们没有更改 Azure 客户端库或更改处理队列的代码中的大部分内容。
【问题讨论】:
-
我会回滚您的应用程序更新,看看您是否恢复正常服务。如果您无法做到这一点,我将仔细检查可能导致阻塞呼叫的任何事情。在代码的关键区域添加大量检测,看看是否有一个共同的地方代码需要很长时间才能执行。
-
自从注意到它在我们的测试环境中也出现以来,我已经能够缩小问题的范围:它是 CloudQueue.DeleteMessage 调用超时(不是每次,只是间歇性,但经常足以引起问题)。不久将进行一些适当的编辑或将其移至新问题。
标签: azure azure-storage