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

UPDATE: 我已经弄清楚了 . 看到这个问题的结尾 .


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

Percentage CPU shown in dark orange.

深橙色线显示CPU百分比 . 这是在重新启动我的所有网站之后,它将 down 带到了这个级别 .

但是,当我查看每个站点报告的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的连接 . 在我的主Web应用程序中,我按照建议只创建一个连接 . 但由于我的Web作业每隔一段时间才运行一次,因此每次运行时都会创建一个与Azure Redis Cache的新连接,这显然会导致问题 . 我在WebJob进程启动时更改了代码以创建Redis缓存连接,并在运行任何单个WebJob时使用现有连接 .

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

希望这有助于那里的人 . 最好的祝愿!

回答(2)

2 years ago

可能你应该去webApp scm?

%yourAppName%.scm.azurewebsites.com ;

有一个页面可以显示您在Web应用程序上运行的所有进程 . (像Console> Process) .

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

2 years ago

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