Azure功能并发超时

时间:2017-05-25 12:02:26

标签: azure azure-webjobs azure-functions

使用消费计划中的Azure功能应用程序,我有两个计时器触发的C#函数,大约需要1分钟才能运行。

如果他们在不同时间运行,他们每个人都会成功运行。但是,如果我在时间上重叠它们,那么函数永远不会完成并且它们会达到超时。

我无法看到并发问题可能来自哪里。这些函数通过EF从Azure SQL读取数据,并将结果写入Azure存储上的不同blob。

这两个函数之前在Azure应用服务中托管的ASP.NET MVC Web应用程序(Web App)中实现了webjobs并且同时正确运行。

当我将两个webjobs移动到Azure Functions App时,我将Web App bin文件夹的内容复制到Function App bin文件夹中,然后在每个函数中引用必要的dll。

我能想到这个并发问题的一个原因是复制Web App bin文件夹的内容。

我能想到的另一个原因是,消费计划是不是预算每个新功能的内存,从而正确缩放。例如,如果触发的新函数本身需要大量内存,则可能应该将其分配给新的计算实例,而不是共享先前的计算实例。因为我的函数占用了大量内存,如果第一个函数被分配给一个小型计算实例而第二个函数被分配给同一个小型计算实例,则两者都可能超过限制而导致超时。

修改

根据Matt Mason MSFT的建议获得其他结果。

  • 使用第二个功能应用。也在消费模式和相同 bin文件夹中的文件。我能够同时运行这两个功能 在不同的功能应用上的时间,他们成功完成。这个 让我相信问题应该来自功能应用程序和 不在Azure SQL或Blob存储依赖项上。

但是,在单独的应用程序中运行这些功能并不是一种可接受的解决方案。

  • 在同一个功能应用上运行这两个功能的结果 监控实时指标流:

    一个。每个功能单独运行并显示CPU总量大约70%到97%,内存大小为400到700 MB。见第一张图片。

    湾两个功能同时进行。我看到CPU为110%,内存为800 MB,然后指标流变为空白,我看到了。 “没有在线服务器”。过了一会儿,我又看到一台服务器在线,但两个功能状态是“从未完成”。这是功能应用程序中的崩溃吗?见下面的图像2,3和4。 one function two functions at beginning two functions after some time enter image description here

1 个答案:

答案 0 :(得分:1)

尝试使用App Insights来分析您的功能:

https://github.com/Azure/Azure-Functions/wiki/App-Insights-(Preview)

您应该能够看到每个实例的性能计数器(有多少内存使用量等),聚合执行指标和执行日志。

如果功能绝对无法一起运行,请尝试将它们放在单独的功能应用程序中,以便它们不会在同一个实例上运行。

<强>更新 它可能是功能应用程序的崩溃。它也可能是CPU太高而影响App Insights数据上传 - 检查服务器ID是否已更改。

您可以在函数中使用ILogger参数绑定并记录进度更新,以查看应用洞察分析中的一些执行跟踪。

不幸的是,缩放在这些情况下效果不佳,我建议您在https://github.com/azure/azure-webjobs-sdk-script/issues提出问题,要求在实例间更好地分发重量级计时器功能 - 但是,最好的办法是使用单独的应用程序或添加租约管理/安排以确保您的功能不会同时运行。