2010-10-20 102 views
4

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

我是应用程序分析的新手,所以请原谅我,如果我错过了某些显而易见的事情,或者没有正确地思考这个问题。

感谢, 科瑞

回答

1
+0

最好创建一个临时复制生产环境并在那里测试 – abatishchev 2010-10-20 14:10:19

+0

我同意。但是,只要您小心,也可以测试开发计算机上的瓶颈。 – rboarman 2010-10-20 21:10:21

+0

我不同意。可以在临时环境中复制环境,但不能复制行为。一旦接收到来自接收100个请求的10个请求,站点就可能表现不同。例如,我有一个网站在我开发的考勤系统中接收生物识别设备的请求。当我在开发机器或分级机器上测试系统时,它的功能就像一个魅力,但是当它同时收到来自多个设备的请求时,我遇到了问题。为了模拟人们和设备的真实行为,它几乎是一个新项目, – jstuardo 2017-11-17 11:58:39

1

我想这与长时间运行的数据库查询,而不是ASP.net应用程序本身的事情。根据我的经验,这是我看到的9次,这使得应用程序服务器随着资源消耗而下降,应用程序必须等待每个查询完成才能继续。查看数据库服务器上的SQL profilier,看看是否有任何查询需要很长时间才能执行。

它可能很简单,只需向列中添加索引或其他小的次优化即可。一旦你知道这个查询,你也可以回到你的代码并调整该部分。

+0

那么,SQL Server机器几乎没有做任何事情。 RAM和CPU以及数据库服务器的整体性能都很好。所以我认为这根本不是数据库问题。 – 2010-10-20 14:10:39

2

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

我刚刚经历了类似的经验,我们的生产服务器出现了过多的CPU负载 - 我们无法在本地或在测试/临时环境中重新创建场景。它与数据库无关(数据库CPU正常)。分析转储文件就是导致问题的原因(我们使用某个库过度编译正则表达式对象)。

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

+0

嗯..是的,我们昨天做到了。但我不知道如何分析它。也许我只需要更多地了解ADPlus和Windbg,因为我真的觉得我不知道自己在做什么。谢谢。 – 2010-10-20 14:12:55

0

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

EQATEC探查仪器您在单独的步骤,使应用程序本身的应用收集它自己的剖析信息,以及分析器,然后仅仅显示计时数据之后。

这意味着您可以完全独立于分析器本身运行您的插装ASP.NET应用程序。 你可以例如测试您的应用程序,将其发送到您在印度的测试网站,让他们在服务器上运行一段时间,在那里它会自行生成计时报告,并让他们将这些报告邮寄给您,然后您可以查看分析器。很简约。

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

4

Sam Saffron(StackoverFlow的创造者之一)不久前写了一个很棒的命令行工具,但不幸的是已经放弃了它。

我的一个朋友分叉的代码,使其在2015年的工作:

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

(该页面有一个链接到Sam的文章,解释如何使用它)

约伟大的事情这个工具(除了“不需要安装”的可移植性,cmd-line接口等等),像NewRelic等APM软件包只监视http请求。如果你的应用有一些后台线程 - 他们不会有太大的帮助。

0

对于那些仍在困扰这个问题的人来说,这取决于你想要完成的事情。

如果一个服务器在CPU上运行的程度很高,那么标准分析器会由于额外的开销而使其停止运行。

实际上有三种不同类型的探查器。标准分析器,轻量级事务分析器和APM工具。你可以阅读更多关于这在我的博客贴子,讨论了所有3:

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