如何识别Azure App Service中100%CPU使用率的原因?

我在Azure应用服务计划中有五个应用程序,针对不同客户端的同一应用程序的所有不同副本。 这是一个带有SQL数据库的ASP.NET MVC应用程序。

今天早上,我醒来缓慢和无响应的网站,有时导致503错误。 在检查应用程序服务计划的CPU /内存指标时,我发现CPU的挂起率为100%:

CPU在100%

而且各个站点的CPU时间图表显示它们都在同一时间,尽pipe有些比其他的更糟:

个别站点CPU使用率

我尝试通过执行高级应用程序重新启动来解决问题,但刀片式服务器无法加载 – 我假设它是因为它试图从服务器获取无法响应的信息。

最后,我尝试着逐个停止每一个站点,这会使CPU回到零,然后再次启动它们,似乎解决了这个问题,但是现在有一些站点已经开始爬升。

几个星期前,我遇到了类似的问题,并认为我的应用程序计划太大了,所以从S1升级到了S2,到今天为止一直没有问题。

对于如何确定这个CPU饥饿行为的原因,我是完全丧失的。 任何人都可以指出我如何开始诊断这个正确的方向?

我们已经有了这个问题几次,每次它被淘汰GC(垃圾收集)。 这很难被certificate和诊断,但是我最终做的是使用kudo(scm)站点,单击工具=>支持(将您带到应用程序的支持站点。

从这里你select你的目录(有几个)和站点,点击分析=>度量,然后点击诊断button( 注意这已经改变,所以这些步骤可以随时改变),然后回到分析=> Dianotics,你最终得到一个内存转储=>“分析状态”报告。 这应该是一个mht文件(您可以在可恶的浏览器IE或Edge中打开),然后search关键字“gc”。

你会发现一些有趣的调用堆栈框架,像“GCFrame”的引用或更有趣的调用“System.Threading.WaitHandle.WaitMultiple”,如果你得到太多这些,你的系统可能会有垃圾回收问题。

如何解决这个…这是一个话题涵盖了很多其他线程,因为这就像问“我如何生活在一个IE 6仍在使用的世界?”…

你最好的select是安装新的遗物或应用程序见解这个特定的应用程序。 它可以通过应用程序服务 – >工具 – >性能监测轻松安装。 这将给你一个详细的视图,在服务器和客户端发生了什么。

应用程序监视

文章: 监控Azure Web应用性能