【问题标题】:Why is my web application seeing latency?为什么我的 Web 应用程序出现延迟?
【发布时间】: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 毫秒的延迟......

【问题讨论】:

    标签: asp.net iis iis-6 delay


    【解决方案1】:

    在花费了我们通过 MSDN 订阅获得的宝贵支持事件之一之后,我终于知道了“所有这些时间都花在了哪里”问题的正确答案。简而言之,时间花在了我们管道中的 HTTP 模块上。 ASP.Net trace.axd 报告的时间测量仅记录在 .aspx 页面本身所花费的时间,包括模块。

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

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

    【讨论】:

      【解决方案2】:

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

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

      www.mysite.com    127.0.0.1
      

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

      更新

      鉴于新的更新。如果服务器负载不足,则在生产环境中进行测试时,这可能会导致差异,因为它正在积极尝试交付比仅尝试交付 1 个的开发机器更多的请求。

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

      【讨论】:

      • 不。在这两种情况下,我们都使用 IE7 来驱动 Fiddler,并且由于 IE7 绕过了对 localhost 的请求的代理,因此在这两种情况下我们都必须使用实际的主机名。
      • 顺便说一句,你所说的“冒险”是什么意思?我能想到的唯一“冒险”是一个 DNS 请求,并且在测试之前很久就被缓存了......
      • 所以你实际上是在你的网络服务器和开发机器上调用localhost 并得到这些响应差异?因为这会改变你的整个问题,可能应该被提及。
      • 在这两种情况下我们都调用machinename。但是,即使是localhost,我也看不出它有什么不同。
      • 如果您测试的是 localhost 与您的 URL,它会有所不同。那是我问你的问题。既然你都是通过 localhost 做的,你是在服务器处理真实请求的时候做的吗?
      【解决方案3】:

      应用是否在两个盒子上以相同的发布配置运行?

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

      我认为可以在 IIS6 上稍微调整配置,但您可能正在研究轻量级非生产网络服务器 (IIS5) 和具有单独应用程序池管理和更多抽象层的强大网络服务器的区别。

      【讨论】:

      • 在问题中添加了 PPS。基本上,设置是“尽可能接近”
      • 如果是这种情况,那么每个 .aspx 页面至少需要 350 毫秒才能返回。显然不是这样。
      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      相关资源
      最近更新 更多