我遇到了我的asp.net c#web应用程序的问题,其中服务器正在达到非常高的CPU使用率,例如。 w3wp进程的80%以上。
这是在我对我的应用程序进行了大量更改后才发生的。我很确定这可能是我所做的更改之一是在iis 7 Web服务器上导致此问题的高CPU使用率。
是否有可能分析过程并找出导致这种高用量的确切原因?或者调试此类问题的机制是什么。
答案 0 :(得分:0)
ASP.NET Case Study: High CPU in GC - Large objects and high allocation rates:
高CPU问题通常是三件事之一
- 无限循环
- 太多的负载(即请求做很多小事的请求太多,所以 没有一件事是罪魁祸首)
- 垃圾收集器中搅拌太多。
尝试监控%GC时间计数器和.NET CLR内存/ #Gen 0集合,#Gen 1集合和#Gen 2集合。
您是否在代码中的任何位置调用了GC.Collect()
?
您所描述的问题也是High CPU in .NET app using a static Generic.Dictionary的症状,由多个线程击中字典引起。如果那就是问题:
要解决此时间问题,您应该特别注意 如果存在,则同步(锁定)对字典的访问 你可能有多个作家同时工作的可能性 时间或者如果有可能你在别人的时候写作 通过相同的字典阅读/枚举。
相关:ASP.NET Performance Monitoring, and When to Alert Administrators
答案 1 :(得分:0)
最快的方法是enable Page Tracing。这将告诉您页面生成的确切时间,以及服务器花费大部分时间的方法。这应该突出显示任何特别慢的运行方法,使您可以将疑难解答集中在有问题的部分。
只需将以下内容添加到您怀疑有问题的任何页面中:
<%@ Page Trace="true" %>
现在,当您在浏览器中导航到该页面时,您将在其底部获得详细的跟踪。