我正在寻找的方法是监控系统中每个页面的page_load,以计算请求与发送回用户的数据结束之间的时间长度。
我希望这样做100%服务器端,我不想对应用程序代码进行任何代码更改。如果需要更改应用程序代码,是否有标准的位置来制作这些代码?我正在考虑某种web.config类型参数,它将信息记录到位置/数据库。我们可以做处理部分,只需要原始数据。
我想收集的信息是:
显然,先决条件是它不应影响性能。
我也在寻找低成本的东西,或者我们可以开发我们系统的方法。
其他信息: 为了更清楚,我们完全控制IIS和底层操作系统,但是,网站应用程序不受我们控制。我们可以更改配置文件,但不能更改应用程序的实际代码。
我们目前正在使用IIS 6.0,但是,如果这种事情效率更高,并且/或者开箱即用,使用IIS 7.0 / 7.5那么它可能会加速向此移动,因此很高兴听到那些建议。
答案 0 :(得分:3)
这不是WebForms关注的问题,而是ASP.net关注的问题。在global.asax
/ IHttpModule
事件中使用BeginRequest
或EndRequest
摘要来跟踪请求的持续时间。
<强> 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