Azure App Service:如何确定哪个进程占用高CPU?

时间:2017-03-17 02:26:37

标签: azure azure-web-sites azure-redis-cache azure-app-service-plans

更新:我已经弄明白了。请参阅此问题的结尾。

我有一个运行四个站点的Azure App Service。除了主要站点之外,其中一个站点还有两个部署插槽。最近,我发现整个App Service计划的CPU利用率非常高。

Percentage CPU shown in dark orange.

深橙色线显示CPU百分比。这是在重新启动我的所有网站之后,将向下带到此级别。

但是,当我查看每个站点报告的CPU使用情况时,它确实很低。

enter image description here

深蓝色线显示CPU时间,基本上没什么。我为我的所有网站都做了这个,所有的图表看起来都一样。基本上,我的网站似乎都没有引起这个问题。

有几个网站有网络工作,所以我看了一下日志,但一切都运行良好。工作每隔几个小时运行几秒钟。

所以我的问题是:如何确定此CPU利用率的来源?任何指针都将非常感激。

更新:感谢下面的回复,我能够详细了解正在发生的事情。我最终得到了我需要的SCM / Kudu工具。您可以转到Azure中的Web应用程序并从侧面导航栏中选择高级工具。从Kudu仪表板中,选择Process Explorer。 “总CPU时间”列中的值并不直接有用,因为它是该进程自启动以来运行的时间(以秒为单位),可能是几分钟或几天前。

但是,如果您每隔一段时间记录一次该值,您可以查看一段时间内的变化,一个过程可能会跳出来。就我而言,这是我的WebJobs流程。每隔60秒,这一个过程在一个环境中消耗大约10秒的处理器时间。

关于这个Kudu仪表板的好处是,如果您能够在实际发生问题时发现问题,可以点击“开始分析”按钮并捕获诊断会话。然后,您可以在Visual Studio中打开它,并获得有关CPU时间花费的详细信息。

如果其他人遇到类似问题,我会提供有关我的具体案例的更多详细信息。正如我所提到的,我的WebJobs exe是罪魁祸首,我发现所有的CPU时间都花在StackExchange.Redis.SocketManager上,它管理与Azure Redis Cache的连接。在我的主Web应用程序中,我按照建议只创建一个连接。但由于我的Web作业每隔一段时间才运行一次,因此每次运行时都会创建一个与Azure Redis Cache的新连接,这显然会导致问题。当WebJob进程启动时,我更改了代码以创建Redis缓存连接,并在任何单个WebJob运行时使用现有连接。

时间会告诉我这是否真的可以解决问题,但我认为会这样。当问题发生时,它总是符合相同的模式:经过几天的运行,我的CPU将在大约12小时的过程中缓慢上升。我的想法是,每次WebJob运行时,它都会创建一个连接对象,它最初并没有产生麻烦,但随着WebJobs每隔一两小时运行一次,就会逐渐形成,直到最终满足一些关键阈值并且CPU使用率会起飞。

希望这有助于那里的人。祝福!

2 个答案:

答案 0 :(得分:2)

可能你应该去webApp scm?

<强>%yourAppName%.scm.azurewebsites.com

有一个页面可以显示现在在您的网络应用上运行的所有流程。 (像Console&gt; Process)。

你也可以去支持页面(从scm右上角)。 您可以在那里找到有关您的性能的更多信息,并进行内存转储(不是针对此问题,但它对性能问题很有用)。

答案 1 :(得分:2)

根据您的描述,我假设您可以利用崩溃诊断程序扩展程序在CPU使用百分比高于特定阈值时从Web Apps和WebJobs捕获转储文件以隔离此问题。有关详细信息,请参阅此官方blog