诊断分析报告中未显示的高 Azure 云服务 CPU 使用率
Diagnosing high Azure cloud service CPU usage which doesn't show in the profiling report
我有一个简单的 Azure 云服务,其中包含一个 Web 角色、没有辅助角色和两个实例。它配置为使用 A0 实例。当我部署它时,门户监控系统显示 CPU 使用率约为 98%,即使在一夜之间也没有下降到合理水平。
但是,如果我下载分析报告,它实际上显示 0% CPU 使用率。这并不奇怪,因为我实际上还没有调用该服务。在服务 运行 时缩减到一个实例有时会导致 CPU 使用率下降到合理水平(低于 10%),但并非总是如此。
我尝试将远程桌面连接到其中一个实例,但是当它们挂钩虚拟机时 CPU 远程桌面的响应时间太长:数据包嗅探显示我什至没有得到在 RD 显示 "Unable to connect" 错误之前返回 TCP ACK。我确实将云服务配置为接收 RD,因为当 CPU 不超过 90% 时我可以连接。
我看到 Azure 网站有一个工具 (Kudu Process Monitor) 提供有关 CPU 使用情况的信息,但它似乎不适用于云服务。
是否有任何其他工具可以查看 CPU 的使用情况?
TL;DR: 远程 PowerShell
与远程桌面相比,远程 PowerShell 对延迟的要求较低,因此一旦将其配置为可用,就可以连接到 运行 98% CPU 的实例并使用 Get-Counter '\Process(*)\% Processor Time'
与你想要的任何后续 formatting pipeline 。诀窍是启用它。
我按照 Remote Powershell to Azure PaaS 上的 MS 博客 post 中的说明进行操作,但它们对我来说并不完美。具体来说,用户创建似乎无声地失败了,因为日志显示用户已创建,但控制面板的用户列表却没有。所以修改后的指令是:
在 .csdef
文件中,在 <WebRole>
配置中添加
<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
并且 Copy Always:
PowerShell -command Set-ExecutionPolicy -ExecutionPolicy Unrestricted
PowerShell .\EnableWinRM.ps1
exit /B 0
和一个文件 EnableWinRM.ps1
Copy Always(替换指纹和主机名):
$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
。
我有一个简单的 Azure 云服务,其中包含一个 Web 角色、没有辅助角色和两个实例。它配置为使用 A0 实例。当我部署它时,门户监控系统显示 CPU 使用率约为 98%,即使在一夜之间也没有下降到合理水平。
但是,如果我下载分析报告,它实际上显示 0% CPU 使用率。这并不奇怪,因为我实际上还没有调用该服务。在服务 运行 时缩减到一个实例有时会导致 CPU 使用率下降到合理水平(低于 10%),但并非总是如此。
我尝试将远程桌面连接到其中一个实例,但是当它们挂钩虚拟机时 CPU 远程桌面的响应时间太长:数据包嗅探显示我什至没有得到在 RD 显示 "Unable to connect" 错误之前返回 TCP ACK。我确实将云服务配置为接收 RD,因为当 CPU 不超过 90% 时我可以连接。
我看到 Azure 网站有一个工具 (Kudu Process Monitor) 提供有关 CPU 使用情况的信息,但它似乎不适用于云服务。
是否有任何其他工具可以查看 CPU 的使用情况?
TL;DR: 远程 PowerShell
与远程桌面相比,远程 PowerShell 对延迟的要求较低,因此一旦将其配置为可用,就可以连接到 运行 98% CPU 的实例并使用 Get-Counter '\Process(*)\% Processor Time'
与你想要的任何后续 formatting pipeline 。诀窍是启用它。
我按照 Remote Powershell to Azure PaaS 上的 MS 博客 post 中的说明进行操作,但它们对我来说并不完美。具体来说,用户创建似乎无声地失败了,因为日志显示用户已创建,但控制面板的用户列表却没有。所以修改后的指令是:
在
.csdef
文件中,在<WebRole>
配置中添加<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
并且 Copy Always:PowerShell -command Set-ExecutionPolicy -ExecutionPolicy Unrestricted PowerShell .\EnableWinRM.ps1 exit /B 0
和一个文件
EnableWinRM.ps1
Copy Always(替换指纹和主机名):$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
。