诊断分析报告中未显示的高Azure Cloud 服务CPU使用率

我有一个简单的Azure Cloud 服务,其中包含一个Web角色,没有工作者角色和两个实例 . 它配置为使用A0实例 . 当我部署它时,门户监控系统显示CPU使用率约为98%,即使在一夜之间它也不会下降到合理的水平 .

但是,如果我下载分析报告,它基本上显示0%的CPU使用率 . 这并不奇怪,因为我还没有实际调用该服务 . 在服务运行时缩放回一个实例有时会导致CPU使用率下降到合理的水平(低于10%),但并非总是如此 .

我试图远程桌面到其中一个实例,但是当它们与虚拟CPU挂钩时,远程桌面的响应时间太长了:数据包嗅探显示我甚至没有在RD显示“Unable”之前得到TCP ACK连接“错误 . 我确实将 Cloud 服务配置为接收RD,因为当CPU不高于90%时,我可以连接 .

我看到,对于Azure网站,有一个工具(Kudu Process Monitor)提供有关CPU使用率的信息,但它似乎不适用于 Cloud 服务 .

还有其他工具可以查看使用CPU的内容吗?

回答(1)

2 years ago

TL;DR: remote PowerShell

远程PowerShell对延迟的要求比远程桌面要小,因此一旦将其配置为可用,就可以连接到运行在98%CPU的实例,并使用 Get-Counter '\Process(*)\% Processor Time' 以及随后的formatting pipeline . 诀窍是启用它 .

我按照Remote Powershell to Azure PaaS上的MS博客文章中的说明进行操作,但他们没有't work perfectly for me. To be specific, the user creation seems to have failed silently, because the log showed the user as created but the control panel'的用户列表没有 . 所以修改后的说明是:

  • .csdef 文件中,在 <WebRole> config add中
<Startup>
  <Task commandLine="EnableWinRM.cmd" executionContext="elevated" taskType="simple" />
</Startup>

并在 <WebRole><Endpoints> 内添加

<InstanceInputEndpoint name="WinRM" localPort="5986" protocol="tcp">
  <AllocatePublicPortFrom>
    <FixedPortRange min="30000" max="30100" />
  </AllocatePublicPortFrom>
</InstanceInputEndpoint>
  • 在Web角色的项目中,添加始终复制的文件 EnableWinRM.cmd
PowerShell -command Set-ExecutionPolicy -ExecutionPolicy Unrestricted
PowerShell .\EnableWinRM.ps1
exit /B 0

和一个始终复制的文件 EnableWinRM.ps1 (替换指纹和主机名):

$thumbprint = '<< Thumbprint for a suitable certificate >>'
$certId = '<< Hostname >>'
winrm create winrm/config/listener?Address=*+Transport=HTTPS `@`{Hostname=`"($certId)`"`;  CertificateThumbprint=`"($thumbprint)`"`}
Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2000
  • 通过 manage.windowsazure.com 的配置选项卡启用远程桌面,在底部任务栏中选择远程 . 这样做的目的是创建一个具有已知用户名和密码的特权用户,因为这是我在下一步中用来连接的用户 .

  • 使用远程桌面用户连接PowerShell:

$cred = Get-Credential
Enter-PSSession -ComputerName <<Hostname>> -Port 30000 -UseSSL -Credential $cred

PS对于任何好奇的人来说,CPU使用率过高归因于 vsperf .