如何确定 Azure 应用服务中 CPU 使用率 100% 的原因?

如何确定 Azure 应用服务中 CPU 使用率 100% 的原因?

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

今天早上我醒来发现网站速度很慢,没有响应,有时会导致 503 错误。检查应用服务计划的 CPU/内存指标后,我发现 CPU 一直保持在 100%:

CPU 处于 100% 状态

各个站点的 CPU 时间图表显示所有站点同时关闭,但有些站点的情况比其他站点更严重:

各个站点的 CPU 使用率

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

最后,我尝试逐一停止每个站点,这使 CPU 恢复为零,然后重新启动它们,这似乎解决了问题,但现在其中一些站点又开始恢复运行。

几周前我遇到过类似的问题,我认为我的应用计划对于我而言太大了,所以从 S1 升级到 S2,直到今天一切都很好。

我完全不知道如何找出这种 CPU 消耗大行为的原因。有人能告诉我如何开始诊断吗?

答案1

我们遇到过几次这个问题,每次都是因为 GC(垃圾收集)失控。很难证明和诊断,但我最终做的是使用 kudo (scm) 网站,单击工具 => 支持(这会将您带到应用程序的支持网站)。

从这里,选择目录(如果有多个)和站点,单击“分析”=>“指标”,然后单击“诊断”按钮(笔记这已经发生了变化,因此这些步骤随时可能发生变化),然后返回到“分析”=>“诊断”,您最终将获得“内存转储”=>“分析状态”报告。这应该是一个 mht 文件(您可以在可恶的浏览器 IE 或 Edge 中打开它),然后搜索键“gc”。

您会发现一些有趣的调用堆栈框架,其中引用了“GCFrame”之类的内容,或者更有趣的是,对“System.Threading.WaitHandle.WaitMultiple”的调用。如果您获得太多这样的内容,则您的系统可能存在垃圾收集问题。

如何解决这个问题...这是许多其他帖子中涉及的一个主题,因为这就像问“在仍然使用 IE 6 的世界中,我该如何生活?”...

答案2

最好的办法是为这个特定的应用安装 New Relic 或 Application Insights。可以通过应用服务 -> 工具 -> 性能监控轻松安装。这将为您提供服务器和客户端发生情况的详细视图。

应用程序监控

文章:监视 Azure Web 应用性能Monitor Azure web app performance

答案3

相关内容