Ken*_*ith 6 c# performance azure azure-web-sites
随着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缓存和每个重要代码路径的异步. )
编辑8/5/14 - 我尝试了下面的一些建议.但是当网站真正繁忙时,即大约100%的CPU利用率,任何下载小型转储或GC转储的尝试都会导致500错误,并显示消息"存储空间不足".我在不同时期都能够下载一个小型转储或GC垃圾,他们还没有表现出什么特别有意思,至少,只要我能想出.(例如,GC转储中最有趣的事情是半打左右> 100KB字符串实例 - 这些实例似乎以某种方式与捆绑子系统相关联,因此我怀疑它们只是缓存ScriptBundle或StyleBundle实例.)
https://{sitename}.scm.azurewebsites.net/ProcessExplorer/一下,您可以对 w3wp 进程进行内存转储和 GC 转储。然后您可以比较 2 个 GC 转储来查找内存泄漏,并使用 Windbg/VS 打开内存转储进行进一步的“离线”调试。