我在 Azure 应用服务中托管的 .NET API 遇到问题。应用程序在正常负载下启动没有任何问题,但当负载增加时,应用程序在启动过程中挂起。在
P2v3
的单个实例上运行。
我们的启动时间需要 5-10 秒,当启动失败时,我们会遇到大约 100req/s。
一旦卡住,应用程序就无法自行恢复,但是查看日志,应用程序没有收到任何请求。请求全部超时。
查看日志,我可以看到一些似乎正在发生的常见日志:
Failed to forward request to http://xxx.xxx.xxx.3:8080. Encountered a System.Threading.Tasks.TaskCanceledException exception after 300002.419ms with message: The request was cancelled due to the configured HttpClient.Timeout of 300 seconds elapsing.. Check application logs to verify the application is properly handling HTTP traffic.
但是,我没有在任何其他日志中看到请求,即使应用程序是
now listening on...
并且我们看到的是 503、504、500 的混合。
您可以在此处看到,例如,有 15 分钟的间隙,除了超时之外什么都没有发生,并且日志只是空的。
到目前为止,我们一直在通过重新部署来恢复,部署到冷插槽中,一旦预热就将其交换过来。
我已经能够在本地复制它,但是在将本地启动时间从大约 3 分钟缩短到 10 秒后,现在似乎一切都可以正常处理。
为了提高您的Web应用程序的性能并改善其启动,请参考以下步骤:-
Visit Diagnose and solve problems > Risk alerts > Availability > View more details
如果您的 Web 应用程序在 2 个或更少的实例上运行,预计会出现大约 50% 的停机时间,因为实例将升级。 考虑将您的 Web 应用程序升级到 3 个具有自动缩放功能的实例,或手动缩放您的 Web 应用程序。 对于 3 个实例,1 个实例将位于不同的升级域中,因此它将提高您的性能并避免停机。
扩展您的 Web 应用程序,从三个选项中选择任意一个。
参考- 如何启用自动缩放-Azure App Service |微软学习
始终就绪的实例将帮助您避免冷启动,因为 Web 应用程序实例将预热并准备好在需要时处理请求。
此外,在诊断和解决问题 > 可用性和性能 > Web 应用程序缓慢和高 CPU 分析中,深入了解 Web 应用程序性能。
此外,在浏览器中加载您的网络应用程序并检查日志流,日志流将详细提供所有启动日志:-