【问题标题】:Azure asp.net core 2.2 getting high CPU usageAzure asp.net core 2.2 获得高 CPU 使用率
【发布时间】:2019-06-19 14:26:06
【问题描述】:

因此,我面临这样一种情况,即部署在 Azure 云上的项目的 CPU 占用率很高,大多数情况下它是 100%,但在重新启动应用程序后,CPU 使用率会在几个小时内达到 10-15%。我确实尝试使用 Kudu 分析器,但它没有帮助,大多数情况下它显示某些方法在总 CPU 使用率为 100% 时使用 40% CPU,但当 CPU 使用率较低时它们为 2-3%。 我注意到一个奇怪的事情是一些 API 控制器方法如果他们没有得到正确的请求 BODY 抛出 CGI/502 错误,即使它应该抛出 Null 引用异常,因为方法得到错误的主体,更有趣 - 返回 CGI异常大约需要 > 2 分钟,而不是通常在本地计算机上的 Web 服务上的 2 秒。 我从 S1 转到 S2 计划,同样的东西,尽管工作速度更快,但 azure 洞察显示相同的 90-10% 的 CPU 使用率。

【问题讨论】:

  • 没有任何代码,我们无能为力。你需要弄清楚你的代码的哪一部分是罪魁祸首。
  • 我查看的所有代码都不能导致 100% CPU。现在,我对为什么 Null 引用异常会变成 CGI 异常并需要我 2 分钟以上的时间才能得到它的响应很感兴趣
  • 如果不共享任何代码,社区除了提供模糊的建议外可能无能为力。我的一个建议是看看您是否可以在本地重新创建问题,或者查看 AppInsights 日志(如果您没有,我会添加它)
  • 这周我尝试重新创建了很多次。但是 100% 是随机发生的,有时在空闲时没有请求发生,从 15% 到 100% 的跳跃会立即进行。并且 100% 保持在 100%,看起来有些进程被卡住了,因为我怎么能解释为什么它是 100% CPU 使用率,即使那里没有请求
  • 没有任何代码很难帮助你。您必须进行分析(即将远程调试附加到您的 azure 应用程序),然后返回更多详细信息。您的代码导致这些峰值的原因有数百万,例如内存泄漏等

标签: azure asp.net-core cpu-usage kudu


【解决方案1】:

首先我建议您编写代码来获取服务器的故障转储,您可以参考此link 进行设置。

下面的内容可以帮助您在 powershell 中编写它。

$dumpFolder = "C:\crash-dumps"

if (!(Test-Path $dumpFolder)) {
    mkdir $dumpFolder | Out-Null
}

$dumpKey = "HKLM:SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"

if (!(Test-Path $dumpKey)) {
    New-Item -Path $dumpKey | Out-Null
}

$dumpKey = "HKLM:SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\dotnet.exe"
New-Item -Path $dumpKey -Force | Out-Null
New-ItemProperty -Path $dumpKey -Name DumpFolder -Value $dumpFolder -PropertyType String -Force | Out-Null
New-ItemProperty -Path $dumpKey -Name DumpCount -Value 3 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $dumpKey -Name DumpType -Value 2 -PropertyType DWORD -Force | Out-Null

$dumpKey = "HKLM:SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe"

New-Item -Path $dumpKey -Force | Out-Null
New-ItemProperty -Path $dumpKey -Name DumpFolder -Value $dumpFolder -PropertyType String -Force | Out-Null
New-ItemProperty -Path $dumpKey -Name DumpCount -Value 3 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $dumpKey -Name DumpType -Value 2 -PropertyType DWORD -Force | Out-Null

根据故障转储,我们可以轻松了解导致问题的部分。

对于类似的问题,你可以追踪这个request。还尝试将您的应用程序降级到 V2.0.0 并查看它是否仍然导致 CPU 峰值。如果是,那么我们需要查看您在 cmets 中提到的代码。

【讨论】:

  • 我也面临与 asp.net core 2.2 相同的高 CPU 使用率,并且没有对代码进行任何更改,我切换到 asp.net core 2.0 并解决了问题。
猜你喜欢
  • 2019-05-24
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2019-08-14
  • 2020-01-22
  • 2013-02-19
  • 1970-01-01
相关资源
最近更新 更多