2012-03-30 53 views
2

我遇到了使用ASP.Net/C#开发的网站的问题,有时无限期地使用所有CPU使用率(100%)。你有什么想法/提示如何去解决可能会导致这样的资源猪?该网站仍在响应,所以它不会崩溃或类似的东西。诊断asp.net网站/应用程序池的性能

我有点无知从哪里开始!

谢谢!

+0

问题仅在特定页面中? – Pankaj 2012-03-30 10:29:51

回答

1

开始使用服务器上的性能计数器。为垃圾收集,线程使用情况添加计数器,并准确查看哪个线程在使用CPU。

而且,看看这个:

http://weblogs.asp.net/jgalloway/archive/2009/04/09/troubleshooting-an-intermittent-net-high-cpu-problem.aspx

+0

对不起,但我在国外 - 我在哪里可以找到'线程使用'性能计数器?这是一个活动的服务器,它没有安装Visual Studio副本。理想情况下,我可以抽样说4个小时的时间,并查看哪些线程对CPU使用率有贡献。理想情况下,我会在某个时间点知道调用堆栈,因为这对诊断问题会有很大的帮助。有任何想法吗? – 2012-04-09 13:44:45

0

我在过去有一个同样的问题。我主要遇到HTML rendering问题很慢。 我通过在页面指令中设置Trace = true解决了这个问题,并找出了需要花费时间的事件。

另一个问题是Memory Management。我正在使用Image Classes,并没有正确地使用Dispose。为此,我开始使用Dispose()方法,并且我可以在架构中使用语句。

using (SqlConnection con = new SqlConnection("Connection String")) 
{ 
    using (SqlCommand cmd = new SqlCommand()) 
    { 
     using (SqlDataReader DR = cmd.ExecuteReader()) 
     { 

     } 
     using (DataTable DT = new DataTable()) 
     { 
     } 
    } 
} 

我想你可能有任何页面,你可能会提取过多的记录。您可以开始使用Paging

最重要的一点是Exception HandlingTry Catch块不应该在每一层。它应该只在Presentation Layer。原因是,当发生异常时,它会直接返回到调用函数。那么为什么要写Try Catch块,并因此在每一层stopping the execution

0

最好的和最简单的出发点是使用性能分析器。只要运行它,运气好点就会在几分钟内解决问题。

尝试dotTrace,这是一个很好的。如果你按照链接,有10天的免费试用和视频教程。