对Azure网站上的爬行CPU利用率进行故障排除

时间:2014-07-28 21:57:48

标签: c# performance azure azure-web-sites

随着Azure网站上的负载增加(以及它正在进行的工作的复杂性),我们注意到我们遇到了CPU利用率问题。即使交通水平保持相当稳定,CPU利用率也会在几个小时内逐渐上升。随着时间的推移,如果Azure统计信息是正确的,我们将以某种方式设法获得>每个实例60秒的CPU(不太清楚它是如何工作的),响应时间将开始急剧增加。

如果我重新启动Web服务器,CPU会立即掉线,然后开始慢速爬行。例如,在下图中,您可以看到CPU爬升,然后重启(使用红色圆圈),然后恢复CPU。

Azure website CPU graph

我非常倾向于怀疑这在我自己的代码中某处存在问题,但我对如何解决这个问题感到头疼。到目前为止,任何在我的开发或测试环境中重现这一点的尝试都被证明是无效的。几乎所有关于分析IIS / C#性能的建议似乎都假设要么直接访问有问题的计算机,要么至少要设置一个" Cloud Service"实例而不是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缓存和async for每个重要的代码路径。)

编辑8/5/14 - 我已经尝试了以下一些建议。但是当网站真正繁忙时,即大约100%的CPU利用率,任何下载小型转储或GC转储的尝试都会导致500错误,并显示消息,"存储空间不足。"我已经能够下载迷你转储或GC转储的各种时间,至少,据我所知,它们还没有显示出任何特别有趣的东西。 (例如,GC转储中最有趣的事情是半打左右的> 100KB字符串实例 - 这些实例似乎以某种方式与捆绑子系统相关联,因此我怀疑它们只是缓存{{ 1}}或ScriptBundle个实例。)

1 个答案:

答案 0 :(得分:3)

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