Azure 应用服务容器不断重新启动 - “容器的可用性检查失败。”

Mar*_*ndl 3 .net containers azure docker

抱歉,我无法为您提供可重现的示例,但我希望您能帮助我弄清楚我的环境出了什么问题。

我在 PC3 应用服务计划(16GB RAM)中运行基于Windows 容器的 .NET 4.7 应用程序。该应用程序公开了一个 REST API,同时也是一个在某些 BlobStorage 事件上触发的 JobHost。

整个业务逻辑运行良好 - 它在本地运行没有任何问题,并且在 Azure 上运行也有限制时间(1 - 5 分钟)。但是,不知何故,容器每 x 分钟重新启动一次,我无法弄清楚原因。

这是我在容器日志中看到的:

02/10/2019 12:23:46.142 INFO - Site: myapp - Container failed availability check. It has failed 122895 check(s). Container will be declared unavailable if it exceeds 3 consecutive failed checks.
02/10/2019 12:23:46.142 ERROR - Site: myapp - Container is unavailable.
02/10/2019 12:23:47.129 INFO - Site: myapp - Container failed availability check. It has failed 5 check(s). Container will be declared unavailable if it exceeds 3 consecutive failed checks.
02/10/2019 12:23:47.129 ERROR - Site: myapp - Container is unavailable.
....
02/10/2019 12:23:56.862 INFO - Site: myapp - Attempting to stop container: 310a7f2278cdb56...
02/10/2019 12:23:56.895 INFO - Site: myapp - Purging pending logs after stopping container
02/10/2019 12:23:56.895 INFO - Site: myapp - Container stopped successfully. Container Id: 310a7f2278cdb56....
Run Code Online (Sandbox Code Playgroud)

我不知道为什么可用性检查失败。有人可以向我解释支票是如何工作的,以及我如何获得有关它失败原因的更多信息吗?

小智 6

应用服务平台通过尝试访问容器的 http 终结点来定期检查容器的可用性。如果容器没有响应,或者响应时间超过 5 秒,我们假设可用性检查失败。如果连续 3 次失败,我们假设容器不健康,停止它并重新启动。

如果您的应用程序是内存/资源密集型的,则容器可能无法在这些参数内响应。

我们引入了一些应用程序设置,您可以在应用程序上设置这些设置,以便在可用性检查失败时控制操作:

CONTAINER_AVAILABILITY_CHECK_MODE=修复

平台检查可用性并在连续 3 次可用性检查后停止并重新启动容器(默认)

CONTAINER_AVAILABILITY_CHECK_MODE=仅报告

平台检查可用性并在连续 3 次可用性检查(默认)后报告(在日志中)容器。平台不会停止/重启容器

CONTAINER_AVAILABILITY_CHECK_MODE=关闭

平台不检查可用性

我们还在App Service wiki 上提供了一个Windows 容器,其中包含您可能会觉得有用但目前尚未纳入我们的文档的项目。