背景-
我有一个.NET应用程序,它在Azure应用程序服务连续Web作业内作为单个多线程进程运行。该应用程序具有以下线程:(1)将其连接到REST API,并拉回存储在Azure SQL数据库中的数据;(2)从SQL数据库请求数据,进行一些计算,然后存储结果,(3)拉出其他数据,将其与发送的规则进行比较,并使用SendGrid SMTP发送电子邮件通知,并使用Twilio发送文本消息。
[此应用程序在虚拟Windows Server 2016 Standard(还承载SQL(2016 Standard)数据库)上作为计划任务运行良好,具有8个内核和8 GB RAM,仅消耗0-15%的CPU和大约100MB的内存。 RAM。
问题-
[将其移动到连接到Azure SQL(标准S20层)的连续Azure WebJob(标准S1层)并启动服务后,SQL和App Service的CPU均达到100%。将App Service升级到P2V2层,并将数据库升级到P1层和CPU,对于App Service和SQL来说大约是60%和70%,但是仍然比预期的要高得多。
有人经历过吗?有谁知道线程限制或Azure处理WebJob中复杂应用程序的能力?关于看什么的建议?无法弄清楚为什么与VM相比,Azure需要更多的资源。希望尝试实现无服务器的灵活性和可扩展性。
没有引发任何错误,该应用程序运行正常,但是希望向该应用程序添加其他功能,但担心会消耗更多资源。
应用程序性能问题通常没有明显的解释,需要深入检查和分析,这些因素比书面描述的原因还要多。
最好的选择是使用Application Insights,看看它们是否可以为您提供帮助。
我要说的是,SQL性能受DTU数量的限制,而本地实例则不受限制。在将应用程序服务计划层从S1扩展到P2V2之后,CPU下降表明,您的服务计划不如本地服务器性能好,或者您的服务计划中正在运行其他应用程序,这导致资源争用。
这里有一篇有关利用Application Insights解决性能问题的不错的文章:
https://docs.microsoft.com/en-us/azure/azure-monitor/learn/tutorial-performance