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

时间:2015-10-14 08:01:09

标签: azure monitoring cpu-usage azure-cloud-services

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

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

我尝试将桌面远程安装到其中一个实例,但是当它们与虚拟CPU挂钩时,远程桌面的响应时间太长了:数据包嗅探显示我甚至没有得到TCP ACK RD之前显示"无法连接"错误。我确实将云服务配置为接收RD,因为当CPU不超过90%时,我可以连接。

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

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

1 个答案:

答案 0 :(得分:1)

TL; DR:远程PowerShell

远程PowerShell对延迟的要求远远低于远程桌面,因此一旦将其配置为可用,就可以连接到运行在98%CPU的实例,并使用Get-Counter '\Process(*)\% Processor Time'随后的任何{{3 }} 你要。诀窍是启用它。

我按照formatting pipeline上的MS博客文章中的说明操作,但它们对我来说并不完美。具体而言,用户创建似乎无声地失败,因为日志显示用户已创建但控制面板的用户列表未显示。所以修改后的说明是:

  1. .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>
    
  2. 在网络角色的项目中,使用始终复制添加文件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
    
  3. 通过manage.windowsazure.com配置标签启用远程桌面,在底部任务栏中选择远程。这样做的目的是创建一个具有已知用户名和密码的特权用户,因为这是我在下一步中用来连接的用户。

  4. 使用远程桌面用户连接PowerShell:

    $cred = Get-Credential
    Enter-PSSession -ComputerName <<Hostname>> -Port 30000 -UseSSL -Credential $cred
    
  5. PS对于任何好奇的人来说,CPU使用率过高归因于vsperf