【发布时间】:2009-02-19 18:18:17
【问题描述】:
我们有一个 ASP.Net 应用程序,它在 IIS6 下表现异常。该应用程序本身是简单的 ASP.Net 2.0 Webforms 协议,没有什么太奇怪的事情发生(管道中有几个 HTTP 模块,但我不会认为那些奇怪的 :) )。我不明白的是页面执行时间,或者更具体地说,是 ASP.Net 跟踪 (trace.axd) 报告的时间与客户端 (Fiddler) 观察到的时间之间的差异。应用在开发者盒子(WinXP、IIS5.1)上运行时,ASP.Net和Fiddler报告的时间非常接近:
页面执行时间:0.0919834 Fiddler 总序列时间:0.1560980
我可以理解从 IIS 到 Fiddler 的 5KB 数据花费了 60 毫秒(两者都在同一台机器上运行,顺便说一句)。现在,当我们将代码移动到服务器(Win2k3、IIS6)时,画面发生了巨大的变化:
页面执行时间:0.1702014 Fiddler 总序列时间:0.5156283
这是同一页面,Fiddler 再次与代码在同一台机器上运行。为什么传送相同的 5KB 突然需要 350 毫秒?
附言。在两台机器上,结果都是通过通过实际机器的主机名访问 URL 来获得的,例如http://machinename/app/page.aspx(相对于http://localhost/app/page.aspx)。
PPS。配置方面,开发盒和服务器的设置尽可能接近——两者都使用完全相同的 web.config。两者都使用集成的身份验证访问数据库(sql server),因此,该应用程序在域帐户下运行。该应用程序使用表单身份验证,并且不会模拟(即它始终在同一帐户下运行)。现在,它在 IIS5 上的工作方式与 IIS6 不同——在 IIS5 上,帐户在 machine.config 的标记中指定,而在 IIS6 上,它是 AppPool 设置。两种环境的设置似乎都很典型,我无法想象它会导致 350 毫秒的延迟......
【问题讨论】: