Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure网站上CPU使用率缓慢的故障排除_C#_Performance_Azure_Azure Web App Service - Fatal编程技术网

C# Azure网站上CPU使用率缓慢的故障排除

C# Azure网站上CPU使用率缓慢的故障排除,c#,performance,azure,azure-web-app-service,C#,Performance,Azure,Azure Web App Service,随着Azure网站负载的增加(以及它所做工作的复杂性),我们注意到我们遇到了CPU利用率问题。CPU利用率在几个小时内逐渐上升,即使流量水平保持相当稳定。随着时间的推移,如果Azure统计数据是正确的,我们将设法获得每个实例超过60秒的CPU(不太清楚这是如何工作的),响应时间将开始显著增加 如果我重新启动web服务器,CPU会立即下降,然后开始缓慢地恢复。例如,在下图中,您可以看到CPU缓慢上升,然后重启(带红色圆圈),然后恢复CPU 我强烈地怀疑这是我自己代码中的一个问题,但对于如何解决这

随着Azure网站负载的增加(以及它所做工作的复杂性),我们注意到我们遇到了CPU利用率问题。CPU利用率在几个小时内逐渐上升,即使流量水平保持相当稳定。随着时间的推移,如果Azure统计数据是正确的,我们将设法获得每个实例超过60秒的CPU(不太清楚这是如何工作的),响应时间将开始显著增加

如果我重新启动web服务器,CPU会立即下降,然后开始缓慢地恢复。例如,在下图中,您可以看到CPU缓慢上升,然后重启(带红色圆圈),然后恢复CPU

我强烈地怀疑这是我自己代码中的一个问题,但对于如何解决这个问题,我有些挠头。到目前为止,任何在我的开发或测试环境中重现这一点的尝试都被证明是无效的。几乎所有关于评测IIS/C性能的建议似乎都假定直接访问相关机器,或者至少是一个“云服务”实例,而不是Azure网站

我知道这有点遥不可及,但是。。。有什么建议,或者是关于它可能是什么,或者是关于如何排除故障的建议吗

(我们对每个重要的代码路径都使用C#5.0、.NET 4.5.1、ASP.NET MVC 5.2.0、WebAPI 2.2、EF 6.1.1、Azure系统总线、Azure SQL数据库、Azure redis缓存和异步。)

编辑2014年8月5日-我尝试了下面的一些建议。但当网站真的很忙时,即CPU利用率达到100%时,任何下载迷你转储或GC转储的尝试都会导致500个错误,并显示消息“没有足够的存储空间”。在我能够下载迷你转储或GC转储的不同时间,他们没有显示任何特别有趣的内容,至少就我所知是这样。(例如,GC转储中最有趣的事情是六个左右>100KB的字符串实例——它们似乎以某种方式与捆绑子系统关联,因此我怀疑它们只是缓存
ScriptBundle
StyleBundle
实例。)

  • 尝试从visual studio对站点进行远程调试
  • 尝试
    https://{sitename}.scm.azurewebsites.net/ProcessExplorer/
    在那里,您可以对w3wp进程进行内存转储和GC转储。 然后,您可以比较2个GC转储以查找内存泄漏,并使用windbg/VS打开内存转储以进行进一步的“脱机”调试

  • 你能远程调试吗?暂停调试器10次。它将在代码花费最多时间的地方停止。有线程、计时器、并发等吗。。。?有背景工作吗?任何静态(静态变量,Application.Items,…)@usr-今晚晚些时候我会尝试一些远程调试,到时候影响会小一些。至于静力学,是的,我有一些——主要用于记录(使用NLog)。我原以为这可能是我在一些旧代码中发现的EF DbContext的静态实例,但我修复了它,但收效甚微。目前正在审查任何后台任务。这可能是恶意后台工作堆积或共享数据结构填充。我不知道这是可用的。干得好,库杜队。到目前为止,我发现了一个问题——当我在VS中打开生成的迷你转储时,它似乎没有选择我的本地调试符号。有没有一个好的方法来实现这一点?只是为了跟进,我想我最终发现了问题(我添加了一个属性来过滤掉一些垃圾IP地址)。我从未能够让远程调试或内存转储正常工作,但GC转储最终为我指明了正确的方向。谢谢