Azure 中的 ASP.NET WebApp 使用大量 CPU

Posted

技术标签:

【中文标题】Azure 中的 ASP.NET WebApp 使用大量 CPU【英文标题】:ASP.NET WebApp in Azure using lots of CPU 【发布时间】:2020-09-15 22:50:03 【问题描述】:

我们在 Azure 中有一个长期运行的 ASP.NET WebApp,它没有暴露真正的端点——它的功能单一,主要是读取和操作数据库数据,实际上是一个批处理的计划任务,每 30 秒由一个计时器触发一次。 该应用程序在大多数情况下运行良好,但我们偶尔会看到应用程序的 CPU 负载接近 AppServicePlan 的最大值的问题,即瞬间而不是逐渐地,并且停止执行更多计时器触发器,并且我们无法在执行代码来解决它(没有死锁等迹象,所有代码路径都有 try/catch,所以应该没有未处理的异常)。我们经常看到连接数据库时出错,但不清楚这些是原因还是症状。

请注意,这是 AppService 计划中的唯一资源。 Azure SQL 数据库位于同一区域,虽然被其他应用程序使用,但它们的使用量非常小,而且它们也没有出现问题应用程序看到的任何问题。

感觉这与基础设施有关,但我们无法找到任何东西来解释正在发生的事情,所以如果有人对我们应该寻找的地方有任何建议,我们将不胜感激。我们启用了基本的 Application Insights(不是 SDK),但除了在应用响应丢失之前看到 CPU 负载峰值之外,鉴于我们对如何最好地利用 Insights 的了解有限,我们几乎没有感兴趣的信息。

【问题讨论】:

关于这个问题,您目前有更好的解决方案或想法吗?这个问题很有意思,很高兴继续关注这个问题的进展。 @Jason,我现在没有关于这个问题的任何进一步信息 - 我们已经考虑过句柄耗尽的可能性,但据我们所知,我们没有达到任何限制 我建议您可以在 azure 门户中提出支持票,因为我们无法从我们的应用程序中获取更多信息。 您是否使用过 Azure 的分析工具或 CPU 监控在 CPU 最大化时转储进程? @ChrisB_WR 是的,您应该可以在那里配置表格。根据您的设置,这也可能会有所帮助...azure.github.io/AppService/2019/10/07/… 这个 SO 答案也可能会有所帮助 - ***.com/questions/49053245/… 【参考方案1】:

根据您的描述,我想到了两点来解决您的问题。首先,你可以通过代码跟踪你的程序的运行状态,并在你的批处理定时任务的开始和结束处放一个日志来记录每次运行的状态。如果可能,记录请求和响应信息以及开始和结束信息。这样可以完整的记录你任务的时间和运行状态。

其次,可以在程序开始数据库操作之前记录日志,以及数据库连接是否成功。最好的情况是能够记录下,什么业务在运行时会触发CPU负载,并跟踪具体的运行情况,以便具体分析是什么原因导致数据库连接失败。

因为你无法重现你的问题,你只能猜测问题的原因。如果通过以上两点还是找不到问题出在哪里,那就适当修改你的定时器,让程序每5分钟触发一次,而不是30秒。

【讨论】:

非常感谢您的建议 - 我们已经尝试记录状态以尝试缩小故障范围,但发生故障时似乎没有特别的因素相关性,这是感觉像是基础设施不仅仅是代码。

以上是关于Azure 中的 ASP.NET WebApp 使用大量 CPU的主要内容,如果未能解决你的问题,请参考以下文章

Azure ASP .net WebApp 请求超时

Azure WebApp Asp.NET Core 2 错误:启动应用程序时出错

Azure中使用大量CPU的ASP.NET WebApp

在 Azure 上部署 Asp.NET Core Web App

Web 应用程序之间的 Asp.Net Core DataProtection 无法在 Azure 上运行

ASP.NET CORE 2.2 WEB APP中的会话过期问题