我们在运行.NET Core 3.1的Azure应用服务上看到此错误。看起来当Azure更新服务器场时,我们的实例重新启动,并尝试同时重新启动所有应用程序服务。我们确实有许多服务在一个实例上运行,因为它是一个DEV / QA实例。该实例具有足够的资源来正常运行,但是它看上去在所有内容同时重新启动时会花费更多时间。
问题在于应用程序服务无法从中恢复,因此我们的服务仅在我们手动重启应用程序后才能再次开始工作。
但是这里的指导是“错开多个应用程序的启动过程。”但是在服务场的更新中,我认为我们没有这种能力正确吗?似乎可以在这里确认:https://twitter.com/martincetkovsky/status/1231160330488774657?lang=en
startupTimeLimit
模块等待可执行文件启动进程侦听端口的持续时间(以秒为单位)。如果超过此时间限制,模块将终止该进程。该模块会在收到新请求时尝试重新启动该过程,并继续尝试在后续传入请求上重新启动该过程,除非该应用程序在最后一分钟内未能启动RapidFailsPerMinute次数。
这意味着该应用程序至少在1分钟后会重试,但对于我们来说似乎并非如此。难道我们这是错误的配置?
我可以在更新后得到一些这些错误(毕竟是DEV / QA),但是如果它无法恢复,那就是一个问题。在产品中,我们不应该看到这种情况,因为我们有更多可用资源,但是自动恢复也很重要。
如何确保我们的服务不会陷入这种状态?除了拥有过多的服务器场(以及相关的费用)以外?
答案 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);
}
}
}
此更改的部署仍在我们的环境中进行,因此我尚未完全证实这可以完全解决问题,但似乎很有希望。