如何在生产环境中跟踪零星的ASP.NET性能问题?

时间:2010-04-04 01:00:08

标签: asp.net performance sql-server-2008 logging windows-server-2008

我的网站暂时存在零星的性能问题。 90%的时间网站速度非常快。但偶尔它会非常非常慢。我的意思是像5-10秒的加载时间那种慢。我以为我把它缩小到我所在的服务器上,所以我将所有内容迁移到一个完全不同的网络托管公司的新专用服务器上。但问题还在继续。

我想我正在寻找的是一个很好的工具,可以帮助我追踪问题,因为它显然不是硬件。我希望能够在我的ASP.NET代码中记录某些事件,并让同一个记录器同时跟踪服务器性能/资源。如果我可以回顾日志,那么我可以看到我的网站在极度缓慢的时候正在做什么。

是否有.NET日志系统允许我使用代码调用它同时跟踪性能?你会推荐什么?

7 个答案:

答案 0 :(得分:2)

我曾经遇到的每一个间歇性性能问题都是由数据库中的某些东西引起的。

您需要查看我的博文Unexplained-SQL-Server-Timeouts-and-Intermittent-Blocking。不,它不是像你期望的那样繁重的INSERT或UPDATE过程造成的。

我会每天运行数据库跟踪1/2。是的,跟踪必须在生产中完成,因为问题通常不会在低使用环境中发生。

您的跟踪日志行将有一个“持续时间”列,显示事件的持续时间。你正在看着长期运行的那些,以及那些可能阻碍长期运行的那些。一旦找到模式,就需要弄清楚事情是如何运作的。

答案 1 :(得分:1)

IIS 7.0具有内置的ETW跟踪功能。 ETW是最快且最少开销的日志记录。它内置于内核中。对于IIS,它可以记录每个呼叫。 ETW的最佳部分,您可以包含系统中的所有内容,并获得应用程序和服务器的整体图像。例如,您可以包括,注册表,文件系统,上下文切换以及获取调用堆栈以及持续时间。

以下是ETW的基本概述,具体针对IIS,而且我在ETW上也很少posts

答案 2 :(得分:0)

我首先要监控ASP.NET related performance个计数器。如果需要,您甚至可以将自己的计数器添加到应用程序中。另外,查看在减速与正常情况下运行的w3wp.exe进程数。看看他们的内存使用情况。听起来像内存泄漏最终会导致工作进程终止,这当然会暂时解决问题。

答案 3 :(得分:0)

我将从以下项目列表开始:

  • 启用ASP.Net Health Monitoring以开始获取一些指标&数字。
  • 检查服务器上的内存利用率。是否重新循环IIS会定期删除此问题(内存泄漏?)。
  • ELMAH是开始查看例外情况的好工具。另外,请查看应用程序可能生成的日志。
  • 然后,我会寻找在特定时间运行的防病毒软件或一些长时间运行的进程,这些进程可能会减慢机器等速度,数据库备份时间表......

HTH。

答案 4 :(得分:0)

您没有提供应用程序在其使用的资源(数据库,网络,文件)方面正在执行的操作的详细信息。除了其他海报的步骤之外,我还会看看在“进程外”发生的任何事情,例如:

  • 数据库连接
  • 文件已打开
  • 访问的网络分享

...基本上是ASP.NET进程中没有发生的任何事情。

答案 5 :(得分:0)

当然最终我只想解决间歇性缓慢问题(而且我还不确定我是否有)。但在我最初的问题中,我要求的是一个相当具体的记录器。

我从来没有找到答案,所以我写了自己的stopwatch threshold logging。它不像我最初的想法那么详细,但它具有非常容易全局应用于Web应用程序的好处。

答案 6 :(得分:0)

根据我的经验,性能相关问题几乎总是与IO相关,很少是CPU。

为了在不编写仪器代码或安装软件的情况下了解事物的位置,可以使用Windows中的性能监视器来查看花费的时间。

了解问题可能出现在哪里的另一种快速方法是在您的计算机上本地运行一个小负载测试,同时将代码分析器(如内置于VS中的代码分析器)附加到进程以告诉您始终在哪里要走了。我通常会用这种方法找到一些“快速获胜”。