【发布时间】:2011-02-25 15:30:17
【问题描述】:
在对我们的应用程序进行压力测试时,我们发现了一些奇怪的问题。我们使用 Application_BeginRequest 和 Application_EndRequest 来记录 Web 请求的开始和结束,以及线程 ID。
但是,从我们的日志中,我们看到 Application_Begin_REquest 没有被触发:
我们使用以下代码在 global.asax.cs 中进行日志记录:
protected void Application_BeginRequest(object sender, EventArgs e)
{
string url = "";
if (HttpContext.Current != null) // this should alway be true
url = HttpContext.Current.Request.Url.ToString();
Dbg.WriteLine(String.Format("Request: {0} {1}", HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"], url));
// integration calls measurement
HttpContext.Current.Items.Add("wcfElapsed", new TimeSpan());
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
string url = "";
if (HttpContext.Current != null) // this should alway be true
url = HttpContext.Current.Request.Url.ToString();
Dbg.WriteLine(String.Format("End request: {0} {1}", HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"], url));
}
这是我们的日志文件。 url 省略 00013 列是线程id。
14.12.10 21:41:25.042 00013 00000 Request: 172.23.26.41
14.12.10 21:41:25.068 00013 00000 End request: 172.23.26.41
14.12.10 21:41:25.212 00013 00000 Request: 172.23.26.41
14.12.10 21:41:25.223 00013 00000 End request: 172.23.26.41
14.12.10 21:41:30.974 00013 00000 End request: 172.23.26.88
可以看到最后两行有两个“End request”,但是最后一个日志行没有(Begin) Request。
我们的 Dbg.WriteLine 使用 System.Diagnostics 跟踪侦听器将数据输出到文件。
环境:Windows Server 2008 R2,ASP.NET 3.5
这仅在执行压力测试时发生。 CPU 利用率约为 60%,最多执行 10 个并发请求。
任何想法,可能有什么问题?
更新:我发现其他一些也确实有类似的问题(尽管在不同的配置中:http://forums.iis.net/t/1154954.aspx) 马特杰
UPDATE#2:今晚与事实有关,用于打印日志文件中线程标识符的 Thread.GetHashCode() 可能会发生变化。见ASP.NET - Thread.GetHashCode() changes
【问题讨论】:
标签: asp.net