ASP.NET监视page_load性能(无代码更改)

时间:2011-12-16 17:04:38

标签: asp.net performance monitoring

我正在寻找的方法是监控系统中每个页面的page_load,以计算请求与发送回用户的数据结束之间的时间长度。

我希望这样做100%服务器端,我不想对应用程序代码进行任何代码更改。如果需要更改应用程序代码,是否有标准的位置来制作这些代码?我正在考虑某种web.config类型参数,它将信息记录到位置/数据库。我们可以做处理部分,只需要原始数据。

我想收集的信息是:

  1. 页面名称(包括查询字符串)
  2. 请求的日期时间
  3. 花费的时间
  4. 有关我们可以获取的请求的任何其他信息!
  5. 显然,先决条件是它不应影响性能。

    我也在寻找低成本的东西,或者我们可以开发我们系统的方法。

    其他信息: 为了更清楚,我们完全控制IIS和底层操作系统,但是,网站应用程序不受我们控制。我们可以更改配置文件,但不能更改应用程序的实际代码。

    我们目前正在使用IIS 6.0,但是,如果这种事情效率更高,并且/或者开箱即用,使用IIS 7.0 / 7.5那么它可能会加速向此移动,因此很高兴听到那些建议。

4 个答案:

答案 0 :(得分:3)

这不是WebForms关注的问题,而是ASP.net关注的问题。在global.asax / IHttpModule事件中使用BeginRequestEndRequest摘要来跟踪请求的持续时间。

<强> StopWatchModule.cs

class StopWatchModule: IHttpModule
{
    private Int64 _requestStartTicks; 

    public void Init(HttpApplication application)
    {
         application.Context.BeginRequest += Application_BeginRequest;
         application.Context.EndRequest += Application_EndRequest;
    }

    private void Application_BeginRequest(object sender, EventArgs e)
    {
        _requestStartTicks = Stopwatch.GetTimestamp();
    }

    private void Application_EndRequest(object sender, EventArgs e)
    {
        Int64 requestStopTicks = Stopwatch.GetTimestamp();

        Double requestDurationMs = (Double)(requestStopTicks - _requestStartTicks) / Stopwatch.Frequency / 1000000f; 
        /* 
           Sample output:
           Request for "~/EditCustomer.aspx" took 37 ms to complete
        */
        HttpContext context = ((HttpApplication)sender).Context;
        Logger.Info("Request for \"{0}\" to {1} ms to complete", 
              context.Request.AppRelativeCurrentExecutionFilePath, 
              requestDurationMs.ToString("r", CultureInfo.InvariantCulture));
    }
}

<强>的Web.config

<configuration>
    <system.web>
        <httpModules>
            <add name="StopWatchModule" type="StopWatchModule" />
        </httpModules>
    </system.web>
</configuration>

我正在从记忆中写作,所以上面可能有错误,但这就是想法。您的日志消息可以根据需要进行详细说明。和Logger是某种类型的日志库。我更喜欢log4net,但选择权在你手中。

答案 1 :(得分:1)

你能触摸global.asax吗?您可以在收到,完成,失败等请求时覆盖应用程序事件

根据您的需求,您可能还会尝试解析IIS日志,因为您可以添加一些性能指标。

答案 2 :(得分:0)

您始终可以在web.config中启用跟踪,并使用选项pageOutput =“false”。

然后,您可以转到trace.axd查看特定请求的信息。

您也可以通过在@page指令中设置特定页面来执行此操作。

答案 3 :(得分:0)

  

我正在寻找的方法是监控每个页面的负载   系统中的页面计算出请求和请求之间的时间   发送回用户的数据的结尾是。

我想知道IIS是否记录了&#39; time-taken字段可以是任何用途,因为它将为您提供时间,IP,字节(发送/接收)等。

有关其他信息,请参阅fields