我有一个简单的Azure云服务,其中包含一个Web角色,没有辅助角色和两个实例。它配置为使用A0实例。当我部署它时,门户监控系统显示CPU使用率约为98%,即使在一夜之间它也不会下降到合理的水平。
但是,如果我下载分析报告,它显示的CPU使用率基本为0%。这并不令人惊讶,因为我还没有实际调用该服务。在服务运行时缩放回一个实例有时会导致CPU使用率下降到合理的水平(低于10%),但并非总是如此。
我尝试将桌面远程安装到其中一个实例,但是当它们与虚拟CPU挂钩时,远程桌面的响应时间太长了:数据包嗅探显示我甚至没有得到TCP ACK RD之前显示"无法连接"错误。我确实将云服务配置为接收RD,因为当CPU不超过90%时,我可以连接。
我看到,对于Azure网站,有一个提供CPU使用率信息的工具(Kudu Process Monitor),但它似乎不适用于云服务。
是否还有其他工具可以查看使用CPU的内容?
答案 0 :(得分:1)
TL; DR:远程PowerShell
远程PowerShell对延迟的要求远远低于远程桌面,因此一旦将其配置为可用,就可以连接到运行在98%CPU的实例,并使用Get-Counter '\Process(*)\% Processor Time'
随后的任何{{3 }} 你要。诀窍是启用它。
我按照formatting pipeline上的MS博客文章中的说明操作,但它们对我来说并不完美。具体而言,用户创建似乎无声地失败,因为日志显示用户已创建但控制面板的用户列表未显示。所以修改后的说明是:
在.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>
在网络角色的项目中,使用始终复制添加文件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
。