【问题标题】:Diagnosing high Azure cloud service CPU usage which doesn't show in the profiling report诊断分析报告中未显示的高 Azure 云服务 CPU 使用率
【发布时间】:2015-10-14 08:01:09
【问题描述】:

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

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

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

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

是否有任何其他工具可用于查看 CPU 的使用情况?

【问题讨论】:

  • 我在 Worker Roles 上看到了这一点,当时我拒绝了 OnStart() 或 Run() 方法,它们抛出异常并导致角色不断回收。如果您查看实例选项卡,角色是否显示为“正在运行”或“忙碌....调用 OnStart()”等?
  • @NickHeppleston,它显示为正在运行,我的日志显示初始化代码正在执行一次。
  • 无赖。在本地运行时,您在模拟器中获得相同的 CPU 使用率吗?
  • 不,虽然我认为模拟器并没有真正模拟太多。启动部署一个完整的 VM 似乎不需要足够长的时间。
  • 它不托管完整的虚拟机,它只是在 WaWorkerHost.exe 进程中运行您的代码。

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


【解决方案1】:

TL;DR:远程 PowerShell

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

我按照Remote Powershell to Azure PaaS 上的 MS 博客文章中的说明进行操作,但它们对我来说并不完美。具体来说,用户创建似乎默默地失败了,因为日志显示用户已创建,但控制面板的用户列表却没有。所以修改后的指令是:

  1. .csdef 文件中,在<WebRole> 配置中添加

    <Startup>
      <Task commandLine="EnableWinRM.cmd" executionContext="elevated" taskType="simple" />
    </Startup>
    

    &lt;WebRole&gt;&lt;Endpoints&gt;里面添加

    <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
    

PS 对于好奇的人,CPU 使用率过高归咎于vsperf

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多