永远在线应用服务计划上的Azure功能超时没有functionTimeout设置

时间:2017-07-26 19:16:54

标签: azure azure-functions

与标题描述类似 - 我在应用服务计划中有一个Azure功能,配置为始终开启,而functionTimeout中没有设置host.json,并且它似乎超时/ 30天后无法完成几分钟到一小时。(......但我觉得这可能是误报......)

HTTP触发功能有时可能需要1-2个小时才能完成。我知道这可能不是最好的设计,根据Azure Function Best Practices我应该把它分解成更小/更易于管理的部分 - 我明白了。但是,我希望应用服务计划上的功能可以像宣传的那样工作 - 对执行时间没有硬性限制。也许这与Unexpected azure-function timeouts on app-service-plan的问题相同,但是没有答案,我使用的是HTTP触发器。

目前,HTTP Triggered方法在工作完成之前不会返回。 (这是一个问题 - HTTP触发器需要更快地返回吗?)

根据Kudu函数调用日志,这个案例报告“Never Finished”,当我点击Toggle Output按钮查看日志时,他们从未进入。

KUDO Invocation Details

当我在该触发器的Logs部分中查看此函数的运行时,似乎该函数刚刚停止,并且日志流只报告没有新的跟踪:

2017-07-26T16:36:43.116 [INFO] [Class1] Update operation started processing 790 sales records ... 2017-07-26T16:36:43.116 [DBUG] [Class2] Matching and updating ids from the map... 2017-07-26T16:38:07 No new trace in the past 1 min(s). 2017-07-26T16:39:07 No new trace in the past 2 min(s). 2017-07-26T16:40:07 No new trace in the past 3 min(s). 2017-07-26T16:41:07 No new trace in the past 4 min(s).

所以不确定为什么这个函数似乎停止了 - 或者它可能停止收集日志语句(有很多),并且由于某种原因,该函数从未完成。

有什么想法吗?

约时间: 2017-07-26T16:00:00 UTC InvocationID: d856c107-f1ee-455a-892b-ed970dcad128(我想?)

如果它确实超时了,我们有什么方法可以知道,(例外?App Insights?等)

3 个答案:

答案 0 :(得分:1)

如果您的HTTP方法花费的时间超过一分钟,则应将其卸载到队列中。期。 (我知道其他答案已经说过了,但值得重复)。

  1. Http连接是一种有限的资源。
  2. Azure作为执行引擎可以处理长时间运行 操作(如队列/服务总线支持所示), http管道可能会切断/超时长时间运行的请求。
  3. 队列触发器可以轻松运行30多分钟。如果你的工作时间比这长,你真的应该把它分成多个队列消息。

    另请查看耐用功能支持:https://github.com/Azure/azure-functions-durable-extension/

答案 1 :(得分:0)

根据我的测试,如果你没有设置超时,我发现azure功能不会停止你的功能。

这是我的测试,我创建了一个ManualTrigger函数,它将每隔10分钟记录一次消息。

以下代码:

<ComboBox x:Name="cb_PortName" ItemsSource="{Binding PortsList}" SelectedValue="{Binding SelectedPort}" DisplayMemberPath="PortNames"/>

日志详情:

enter image description here

在日志中,您可以找到我的功能执行70分钟。它仍然运行良好。

无痕迹表示没有新请求发送到azure函数。

  

目前,HTTP Triggered方法在工作完成之前不会返回。 (这是一个问题 - HTTP触发器需要更快地返回吗?)

正如Jesse Carter所说,当您使用HTTP Triggered方法时,您无法执行长时间功能。

由于您的客户端(发送请求)将具有超时值。它会等待函数的响应。

通常,如果我们想要执行长时间功能,我建议您使用http触发器来获取请求。在http触发器功能中,您可以将队列消息添加到azure存储队列中。

然后你可以编写一个队列触发函数来执行长时间的工作。

答案 2 :(得分:0)

不管功能应用程序超时设置如何,HTTP触发功能可以花费最大时间来响应请求的时间为230秒。这是因为Azure负载平衡器的默认空闲超时。对于更长的处理时间,请考虑使用“耐用功能”异步模式或推迟实际工作并返回立即响应。 Function app timeout duration: Check Notes