0

更新:我已经想通了。看到这个问题的结尾。Azure应用服务:如何确定哪个进程消耗高CPU?


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

Percentage CPU shown in dark orange.

暗橙色线显示了CPU百分比。这是刚刚重新启动我的所有网站后,其下降到这个级别。

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

enter image description here

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

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

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


UPDATE:由于下面的答复,我能够获得更多的细节到发生了什么事。我最终从SCM/Kudu工具中获得了我所需要的。您可以通过转到Azure中的Web应用程序并从侧面导航选择“高级工具”来获得此处。从Kudu仪表板中选择Process Explorer。 “总CPU时间”列中的值并不直接有用,因为启动后进程运行的时间(以秒为单位)可能是几分钟或几天前。

但是,如果您每隔一段时间记录一次该值,则可以查看随时间推移的变化,并且一个进程可能跳出您的身边。就我而言,这是我的WebJobs流程。每60秒钟,这一个过程耗费大约10秒的处理器时间,只是在一个环境中。

这个Kudu仪表板的好处在于,如果您可以在实际发生的情况下发现问题,则可以点击Start Profiling按钮并捕获诊断会话。然后,您可以在Visual Studio中打开它,并获取有关CPU时间花费在哪里的一些细节。

为了防止其他人看到类似的问题,我会提供有关我的特殊情况的更多详细信息。正如我所提到的,我的WebJobs exe是罪魁祸首,我发现所有的CPU时间都花在StackExchange.Redis.SocketManager上,该管理器管理着与Azure Redis Cache的连接。在我的主要网络应用程序中,我建议只创建一个连接。但是由于我的网络作业每隔一段时间只运行一次,因此每次运行时都会创建与Azure Redis Cache的新连接,这显然会导致问题。当WebJob进程启动时,我更改了代码以创建Redis缓存连接,并在任何单独的WebJob运行时使用现有连接。

时间会证明这是否真的解决了这个问题,但我认为它会。发生问题时,它总是符合相同的模式:经过几天运行良好后,我的CPU会在大约12个小时的时间内缓慢上升。我的想法是,每次WebJob运行时,它都会创建一个连接对象,起初并没有产生麻烦,但随着WebJobs每隔一两小时就会运行一次,cruft正在建立,直到最终达到某个关键阈值并且CPU使用率会起飞。

希望这可以帮助那里的人。最好的祝愿!

回答

2

可能你应该去webApp scm?

%yourAppName%.scm.azurewebsites.com;

有一个页面,它可以显示所有进程,现在运行在您的Web应用程序中。 (如Console> Process)。

你也可以去支持页面(从scm右角)。 你可以在这里找到一些关于你的性能的更多信息,并使内存转储(不是为了这个问题,而是对性能问题有用)。

+0

我看到一个地方,您可以看到自启动进程以来的总CPU时间(以秒为单位),但似乎并未显示即时使用情况。我试图回答这个问题:目前我的CPU吃什么? 我尝试刷新上述屏幕几次,但我没有看到数字变化很大。您提到的屏幕只显示四个进程。我在想,还有一些我没有看到的过程。任何想法我怎么能看到机器上的所有进程? –

2

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

+0

这看起来非常有用。我会马上试一试。 –