如何处理Azure App Service无法从“ Http错误500.37-ANCM无法在启动时间限制内启动”中恢复的问题

时间:2020-06-29 20:57:33

标签: azure asp.net-core azure-web-app-service

Http Error 500.37 - ANCM Failed to Start Within Startup Time Limit

我们在运行.NET Core 3.1的Azure应用服务上看到此错误。看起来当Azure更新服务器场时,我们的实例重新启动,并尝试同时重新启动所有应用程序服务。我们确实有许多服务在一个实例上运行,因为它是一个DEV / QA实例。该实例具有足够的资源来正常运行,但是它看上去在所有内容同时重新启动时会花费更多时间。

问题在于应用程序服务无法从中恢复,因此我们的服务仅在我们手动重启应用程序后才能再次开始工作。

在这里他们提到了错误: https://docs.microsoft.com/en-us/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-3.1#:~:text=500.37%20ANCM%20Failed%20to%20Start%20Within%20Startup%20Time%20Limit&text=By%20default%2C%20the%20timeout%20is,startup%20process%20of%20multiple%20apps

但是这里的指导是“错开多个应用程序的启动过程。”但是在服务场的更新中,我认为我们没有这种能力正确吗?似乎可以在这里确认:https://twitter.com/martincetkovsky/status/1231160330488774657?lang=en

基于此:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-3.1#attributes-of-the-aspnetcore-element

startupTimeLimit
模块等待可执行文件启动进程侦听端口的持续时间(以秒为单位)。如果超过此时间限制,模块将终止该进程。该模块会在收到新请求时尝试重新启动该过程,并继续尝试在后续传入请求上重新启动该过程,除非该应用程序在最后一分钟内未能启动RapidFailsPerMinute次数。

这意味着该应用程序至少在1分钟后会重试,但对于我们来说似乎并非如此。难道我们这是错误的配置?

我可以在更新后得到一些这些错误(毕竟是DEV / QA),但是如果它无法恢复,那就是一个问题。在产品中,我们不应该看到这种情况,因为我们有更多可用资源,但是自动恢复也很重要。

如何确保我们的服务不会陷入这种状态?除了拥有过多的服务器场(以及相关的费用)以外?

1 个答案:

答案 0 :(得分:5)

根据Microsoft的建议,我继续在我们的Web应用程序上设置了AutoHeal。

这是我正在使用的ARM模板摘录:

  Future<void> signInUser(String userEmail, String userPassword, errMessage) async {
    try {
      authResult = await _firebaseAuth.signInWithEmailAndPassword(email: userEmail, password: userPassword);
      print(authResult.user.uid);
    } on PlatformException catch(error) {
      errMessage = 'An error occurred while processing the request. Please check and try again.';
      if(error.message != null) {
        errMessage = error.code.toString();
        print(errMessage);
      }
    }
  }

此更改的部署仍在我们的环境中进行,因此我尚未完全证实这可以完全解决问题,但似乎很有希望。