Asp.net 使用aspx页面的iis启动延迟

Asp.net 使用aspx页面的iis启动延迟,asp.net,iis,Asp.net,Iis,环境:windowsserver2003 ;;IIS 6,ASP.NET 2.0.50727 我对我们设置的全新web服务器非常着迷(请注意,这个问题不会发生在具有相同配置的其他web服务器上)。首次加载和asp.net应用程序时,页面在浏览器中显示之前会挂起一分钟以上。加载第一个页面后,一切都运行得非常快 注1:您可能会说应用程序是第一次编译的。但我已经排除了这个可能性。我将跟踪消息放在应用程序的任何地方,所有跟踪消息在请求页面的一秒钟内运行。因此,应用程序可以立即编译并运行。但当应用程序完成

环境:windowsserver2003 ;;IIS 6,ASP.NET 2.0.50727

我对我们设置的全新web服务器非常着迷(请注意,这个问题不会发生在具有相同配置的其他web服务器上)。首次加载和asp.net应用程序时,页面在浏览器中显示之前会挂起一分钟以上。加载第一个页面后,一切都运行得非常快

注1:您可能会说应用程序是第一次编译的。但我已经排除了这个可能性。我将跟踪消息放在应用程序的任何地方,所有跟踪消息在请求页面的一秒钟内运行。因此,应用程序可以立即编译并运行。但当应用程序完成页面渲染并打印我的最后一条跟踪消息时,什么也没有发生。IIS在将完成的页面通过http传输到用户浏览器之前,在幕后做了整整一分钟的工作

注2:我们发现,在第一次点击应用程序后,一切正常,如果我们等待一个小时,那么我们会再次得到延迟。因此,IIS的缓存中有一些东西,它会在一小时后清除,并导致我们的站点再次暂停

注3:在每次测试之间,我们停止/启动IIS以在加载应用程序时强制其挂起

注4:我们观察了任务管理器,以查看IIS是否正在增加,是否占用了大量资源来处理某些内容。但事实并非如此。在浏览器显示页面之前,我们确实看到了一个非常快的峰值,达到了50%,但在之前的60秒内,服务器上的使用率只有1%

注5:在另一个测试中,我创建了一个HelloWorld.html页面,这不会导致IIS挂起。因此,它与在ASP.NET库第一次通过http发送呈现页面时调用该库有关。此外,由于应用程序已经编译并立即运行,因此导致延迟的只是asp.net将呈现的页面发送到用户浏览器的一部分

有什么想法吗?我们在这里是个失败者。我们所有的其他web服务器都是以相同的方式安装的,工作正常,但这是一个新的安装。所以一定有一个配置设置丢失了,或者可能需要安装一些东西

谢谢


Brian

此框上的某些aspnet.config设置可能与其他设置不同。您是否尝试过将其配置文件复制到此服务器?似乎有证书选项和注册表修改,您可以在页面初始加载期间(除了预编译)删除一些延迟时间


如果您有权访问服务器,请参阅和

,然后确保将应用程序池回收实际记录到事件日志中

cscript adsutil.vbs获取w3svc/AppPools/DefaultAppPool/LogEventOnRecycle

您可以将其设置为使用日志记录所有内容 cscript adsutil.vbs Set w3svc/AppPools/DefaultAppPool/LogEventOnRecycle 255

然后检查是否有任何回收

应用程序初始化、创建工作进程、线程、加载应用程序域和所有引用dll可能需要一些时间,这是正常的,但1分钟的延迟可能是其他原因

尝试在服务器上预编译应用程序,看看是否有帮助 aspnet_编译器-m/LM/W3SVC/[site id]/Root/[your appname]

如果要深入挖掘,可以检查事件跟踪ETW

  • 日志查询提供者
  • 将与IIS/ASP.NET相关的GUID保存到类似iisproviders.txt的文件中
  • logman start ExampleTrace-pf iisproviders.txt-ets-rt
  • 复制
  • LogParser“从ExampleTrace中选择”—i:ETW
  • logman stop示例跟踪-ets
  • 你可以在这里找到更多

    如果w3wp.exe有TCP连接超时,我还会用procexp检查它,或者用Procmon检查其他线索

    如果您有windbg的使用经验,那么您可以向应用程序发出请求,然后快速将调试器连接到进程

    windbg -p [process id of the app pool]
    .loadby sos mscorwks
    g
    
    从那里开始。如果出现异常、进程崩溃等,您应该能够捕获它


    一旦我们遇到了这样一个奇怪的服务器问题,.NET重新安装解决了这个问题,但仍然不确定是什么原因造成的。

    您可能需要检查的一件事是页面加载中是否有任何数据库访问。这可能会在初始页面加载期间阻止页面的创建。然后,当查询被缓存时(通过db引擎或其他缓存机制,如memcached),后续页面加载将正常工作

    根据你最后的评论

    我可以多次停止/启动IIS,并且应用程序总是立即运行。我以为它已经修好了。但是现在我又试了一次(它在过去的几个小时里一直闲置着),现在它又回到了第一个请求的挂起状态


    这可能意味着缓存已过期,因此需要再次访问数据库,从而导致页面加载延迟。

    您是否在事件查看器上看到任何asp.net错误?您必须至少有一些超时事件,以及来自断开线程的客户端的关闭连接。我们查看了事件查看器,但没有看到任何内容。我会做更多的测试,然后再看一遍。此外,除了我们的测试之外,此服务器没有流量。所以没有客户端丢弃线程或类似的东西。只需我们执行简单的页面请求和监视就可以挂起。另一个问题可能是快速池重置,您可能有类似的配置,但池的设置可能不同。检查是否在内存增长或过快等情况下重新启动。还可以使用sys internals中的process explorer查看和检查系统的运行情况、运行的线程、iis是否在asp.net上重新启动等。尝试增加web.config上的编译时间,因为:
    aspnet.config文件是相同的(而且非常简单)。[代码][代码]