代码之家  ›  专栏  ›  技术社区  ›  user8032

为什么我的Web应用程序看到延迟?

  •  4
  • user8032  · 技术社区  · 16 年前

    我们有一个ASP.NET应用程序,它在iis6下的行为很奇怪。应用程序本身就是简单的ASP.NET 2.0 WebForms交易,里面没有发生什么太奇怪的事情(管道中有几个HTTP模块,但我不会认为这些很奇怪)。我不明白的是页面执行时间,或者更具体地说,是ASP.NET跟踪(trace.axd)报告的时间和客户机(fiddler)观察到的时间之间的差异。当应用程序在开发人员框(winxp,iis5.1)上运行时,ASP.NET和fiddler报告的时间非常接近:

    Page exec time             :  0.0919834
    Fiddler Total Sequence time:  0.1560980 

    我可以理解60毫秒花费在从IIS获取5千字节的数据到Fiddler(这两个都在同一台机器上运行,btw)。现在,当我们将代码移动到服务器(win2k3,iis6)时,图片会发生显著变化:

    Page exec time             :  0.1702014
    Fiddler Total Sequence time:  0.5156283 

    这是同一页,小提琴手又在同一台机器上用代码运行了。为什么突然需要350毫秒才能达到同样的5千字节?

    ps.在两台机器上,通过实际机器的主机名访问URL来获得结果,例如 http://machinename/app/page.aspx (而不是 http://localhost/app/page.aspx )

    PPS。从配置的角度来看,dev-box和服务器的设置是尽可能接近的——都使用完全相同的web.config。两者都通过集成身份验证访问数据库(SQL Server),因此应用程序在域帐户下运行。应用程序使用表单身份验证,并且不模拟(即,它始终在同一帐户下运行)。现在,这在iis5上的工作方式不同于iis6——在iis5上,帐户在machine.config的tag中指定,在iis6上是AppPool设置。这两种环境的设置都很典型,我无法想象它会导致350ms的延迟…

    3 回复  |  直到 15 年前
        1
  •  4
  •   user8032    15 年前

    在花费了我们订阅的几个宝贵的支持事件中的一个之后,我终于知道了“这段时间花在哪里”问题的正确答案。简而言之,时间花在我们的管道中的HTTP模块上。ASP.NET trace.axd报告的时间度量值只记录.aspx页本身所花费的时间,模块为 不是 包括。

    确定这一点的一个简单方法(并查看每个模块完成它的工作需要多长时间)是使用ETW(Windows事件跟踪)。这里是 explanation (我强烈怀疑这篇文章是在他们看了我们的案例之后写的):我可以在上面的精彩描述中添加一点,那就是我使用了 SvcTraceViewer 而不是日志分析器来分析跟踪输出。

    更新:上述方法也适用于Windows Server 2008,只需确保 Tracing installed .

        2
  •  1
  •   Nick Berardi    16 年前

    对您正在调用的URL执行跟踪路由,并对其进行比较。我敢打赌,开发人员机器会让你留在机器内部,但在生产机器上,你会从外部进入,然后通过IP地址返回。

    如果是这种情况,请尝试将其添加到主机文件(C:\windows\system32\drivers\etc\hosts

    www.mysite.com    127.0.0.1
    

    这将确保您的请求不会在机器外冒险提出请求。您应该看到响应时间开始相互一致。

    更新

    提供了新的更新。如果服务器处于负载下,而在生产环境中进行测试,这可能会造成差异,因为它正在积极地尝试传递比仅尝试传递1的开发机器更多的请求。

    或者可能是因为您正在测试两个不同版本的IIS,XP上的5.1和2003年的6.0。除非两个环境运行的是同一个软件,否则无法解释这两种差异。

        3
  •  0
  •   FlySwat    16 年前

    应用程序在两个框中运行的版本配置是否相同?

    编辑:请求管道在iis5和iis6之间发生了巨大变化,trace.axd只会看到它的ASP.NET部分,而不是新的应用程序池和http.sys组件。

    我可以想象配置可以在iis6上稍作调整,但您可能正在研究轻量级非生产Web服务器(iis5)和健壮的Web服务器(具有用于管理的单个应用程序池和更多抽象层)的区别。