随着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
实例.)