如何确定超出主机阈值的原因:Azure函数中的[线程]

时间:2019-07-09 02:07:49

标签: azure async-await azure-functions

我正在根据消费计划运行Azure功能。主机运行状况监视程序由于达到线程阈值而每周或两周将其关闭。我已经阅读了有关此内容的大部分内容(例如,以https://aka.ms/functions-thresholds开头),并且了解了运行状况监控器的功能。我读过的大多数文章都讨论了连接阈值,而不是线程。我无法确定的是如何对此进行更深入的故障排除并确定代码的哪一部分导致了线程问题。我没有使用任何显式的TPL代码。我正在使用静态HttpClient针对REST API进行很多非常基本/标准的异步等待操作,而使用静态DocumentClient针对CosmosDB执行标准的Crud操作。我正在调用的仅有的两个与任务相关的方法是异步和等待。我在此功能中未使用任何重试模式。 Application Insights在告诉我哪些调用正在创建线程,哪些线程仍处于打开或放弃状态等方面并没有给我太多帮助。

关于如何更深入地解决问题的任何建议?我已经与Microsoft开了一张支持票,也正在等待他们的帮助。

谢谢,汤姆

1 个答案:

答案 0 :(得分:0)

我相信有几件事需要考虑

  • 功能应用程序中的功能数量
  • 异步操作数(在您的情况下为2)
  • 一次并行执行的次数

“消费计划”中的功能基于最多触发200个实例(没有限制单个实例中的并发执行次数)的事件(使用启发式)的数量而定。

因此,即使您具有异步/等待代码,多个长时间运行的并发执行也可能会导致问题。另外,您使用什么触发器以及以什么速率触发将影响横向扩展。

要解决此问题,您可以

  • 如有可能,将功能应用拆分为多个功能应用
  • 使用doc,它应允许您扩展长期运行的操作(如果有的话)