Azure应用服务:如何确定哪个进程正在消耗大量CPU?

Bri*_*Rak 6 azure azure-web-sites azure-redis-cache azure-app-service-plans

更新:我想通了。请参阅此问题的结尾。


我有一个运行四个站点的Azure应用服务。除主要站点外,其中一个站点还有两个部署插槽。最近,我发现整个App Service计划的CPU使用率确实很高。

CPU百分比以深橙色显示。

深橙色线显示CPU百分比。这只是在重新启动所有站点之后,它已降至此级别。

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

在此处输入图片说明

较深的蓝线显示CPU时间,基本上没有显示。我在所有网站上都这样做,所有图形看起来都一样。基本上,似乎没有我的网站引起此问题。

一些站点有网络作业,因此我看了一下日志,但那里的一切运行正常。作业每隔几个小时运行几秒钟。

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


更新:由于下面的答复,我能够更详细地了解正在发生的事情。我最终从SCM / Kudu工具获得了所需的东西。您可以通过转到Azure中的Web应用并从侧面导航中选择“高级工具”来到达此处。从Kudu仪表板中,选择Process Explorer。Total CPU Time列中的值不是直接有用的,因为它是该进程自启动以来已经运行的时间(以秒为单位),可能是几分钟或几天前。

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

此Kudu仪表板的妙处在于,如果您可以在实际发生问题时及时发现问题,则可以单击Start Profiling按钮并捕获诊断会话。然后,您可以在Visual Studio中打开它,并获得一些有关CPU时间的花费的详细信息。

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

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

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

小智 4

也许你应该去 webApp scm?

%yourAppName%.scm.azurewebsites.com

有一个页面可以向您显示现在在您的网络应用程序上运行的所有进程。(类似于“控制台”>“进程”)。

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

  • 我看到一个地方可以看到自进程启动以来的总 CPU 时间(以秒为单位),但它似乎没有显示瞬时使用情况。我试图回答这个问题:目前是什么正在消耗我的 CPU?我尝试刷新上面的屏幕几次,但我没有看到数字有太大变化。您提到的屏幕仅显示四个进程。我想一定还有其他一些我没有看到的过程。知道如何查看机器上的所有进程吗? (2认同)