【问题标题】:Azure Function reaching timeout without doing anythingAzure 函数达到超时但不执行任何操作
【发布时间】:2017-02-05 13:37:40
【问题描述】:

我在 Node.js 中有一个 Azure Function 应用程序,其中包含几个队列触发的函数。

这些都很好,直到我在我的函数日志中看到几个超时。 从那时起,我的触发函数实际上都没有做任何事情。他们只是在在执行第一行代码之前保持超时,这是一个context.log()-statement 来显示执行时间。

这可能是什么原因?

【问题讨论】:

  • 你试过回收实例吗?
  • 我尝试重新启动我的应用服务,但这似乎没有帮助..

标签: node.js azure azure-functions azure-storage-queues


【解决方案1】:

在 azure 门户中检查您的函数存储帐户,您可能会看到非常高的文件监控活动。

这可能是由于 Azure 文件之间的交互并需要较大的 node_modules 树。一旦需要模块一次,函数将快速执行,因为模块被缓存,但这些超时可能会使函数应用程序进入超时 -> 重启循环。

对此有很多讨论,以及一项可能的改进(在服务器端模块上使用 webpack)here

其他可能性:

  • 尽可能减少节点模块的数量
  • 转为专用而不是消耗计划(它在具有更好性能的不同文件系统上运行)
  • 使用不受这些限制的 C# 或 F#

【讨论】:

  • “一旦模块被需要一次,函数将快速执行,因为模块被缓存”,这个问题开始随机发生,所以我认为我的模块应该已经被缓存了?我确实看到我的存储帐户花了我不少钱,这是否也与node_modules 有关?他们是否经常重新加载我的模块?
  • 是的。如果遇到超时,Azure 函数主机将重新启动,因为它假定存在错误。主机重启后,必须重新加载模块(这可能发生在功能代码更改、功能应用重启等之后)。缓存由节点进程本身在 require 调用中完成(并且重新启动会终止该进程)。
  • 我明白了...感谢您的见解!将我的功能转移到专用计划是否容易?
  • @Schaemelhout - 请不要在 cmets 中隐藏其他问题(这会鼓励在 cmets 中进行讨论,这违背了 StackOverflow 的指导方针)。如果没有明确记录,最好发布一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
相关资源
最近更新 更多