如何分析在生产服务器上运行的ASP.NET应用程序?

时间:2010-10-20 13:50:51

标签: asp.net profiling

我有一个ASP.NET应用程序,它始终在生产服务器上使用75% - 100%的CPU。如何分析应用程序以确定哪些代码部分占用了最多的CPU?我看过几个不同的工具(Xte Profiler,EQATEC,dotTrace),但他们似乎都希望你在他们的工具中加载和运行应用程序。在我看来,他们希望您在他们的工具中加载应用程序并在本地运行测试(而不是在生产中)。我希望在应用程序运行的同时对应用程序进行概要分析,让人们看到它实际发生了什么。这可能吗?

我是应用程序分析的新手,所以请原谅我,如果我错过了一些明显的东西,或者我没有正确地思考这个问题。

谢谢, 科里

7 个答案:

答案 0 :(得分:6)

Sam Saffron(StackoverFlow创建者之一)不久前编写了一个很棒的命令行工具,但遗憾的是它放弃了它。

我的一位朋友将代码分叉,以使其在2015年发挥作用:

https://github.com/jitbit/cpu-analyzer

(页面上有Sam的帖子链接,说明如何使用它)

这个工具的好处(除了“无需安装”可移植性,cmd-line接口等等)是像NewRelic等APM包只监视http请求。如果你的应用程序有一些背景线程 - 它们将无济于事。

答案 1 :(得分:2)

您应该考虑在生产服务器遇到高CPU时进行内存转储。查看ADPlus并在asp.net进程上进行挂起转储。然后可以使用Windbg或其他工具对其进行分析。

我刚刚经历了类似的经历,我们的生产服务器遇到了过多的CPU负载 - 我们无法在本地或测试/暂存环境中重新创建这种情况。它与数据库无关(数据库CPU正常)。分析转储文件是我们解决导致问题的原因(我们正在使用的某些库过度编译正则表达式对象)。

如果没有Tess' blog,这个答案就不完整了,所以这就是链接。

答案 2 :(得分:1)

我的猜测它与长时间运行的数据库查询有关,而不是ASP.net应用程序本身。根据我的经验,这是我看到的9次,这会使应用服务器在资源消耗时陷入爬行,应用程序必须等待每个查询完成继续。查看数据库服务器上的SQL配置文件,看看是否有任何查询需要很长时间才能执行。

它可以像为列添加索引或其他一些小的优化一样简单。一旦您知道了查询,您就可以回到您的代码并调整该部分。

答案 3 :(得分:0)

您最好的选择是在自己的计算机上分析您的代码,以确定它花费的时间。

对此进行为期十天的免费试用:

http://www.jetbrains.com/profiler/

以下是一些让您前往的链接:

http://blogs.msdn.com/b/alikl/archive/2009/03/06/why-my-asp-net-application-s-performance-is-less-than-optimal.aspx

http://msdn.microsoft.com/en-us/library/ms178643(v=VS.100).aspx

http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx

答案 4 :(得分:0)

使用EQATEC Profiler分析ASP.NET当然是可能的。请参阅:
Profiling ASP.NET websites with EQATEC Profiler

EQATEC Profiler在一个单独的步骤中监控您的应用程序,使应用程序本身能够收集它自己的分析信息,然后分析器只显示该时间数据。

这意味着您可以完全独立于探查器本身运行已检测的ASP.NET应用程序。 你可以,例如检测您的应用程序,将其邮寄到您在印度的测试站点,让他们在他们的服务器上运行它几天,它将自己生成时间报告,并让他们将这些报告邮寄给您,然后您可以查看剖析器。非常整洁。

注意:要让配置文件的应用程序“自行生成”时序快照,它必须知道何时生成它们。默认情况下,这是在ASP.NET应用程序中调用Application_End方法的时候。您可以使用EQATEC Profiler API以编程方式在适合您的情况下转储快照。请参阅用户指南或查看this thread

答案 5 :(得分:0)

对于那些偶然发现这个问题的人来说,这实际上取决于你想要完成的事情。

如果服务器在CPU上运行的可能性很高,那么标准的分析器会因为它的额外开销而停止运行。

实际上有三种不同类型的分析器。标准分析器,轻量级事务分析器和APM工具。您可以在我的博客文章中详细了解这一点,该文章讨论了所有3:

.NET Profilers: 3 types and why you need all of them

答案 6 :(得分:0)

You can read about this on Microsoft Developer Network. You can select documentation according to the version of your Visual Studio. You should verify profiling functionality is provided for your Visual Studio type.

How to: Profile a Web Site or Web Application Using the Performance Wizard

时,