使用aspx页面启动延迟

时间:2012-08-30 19:44:29

标签: asp.net iis

环境:Windows Server 2003; IIS 6,ASP.NET 2.0.50727

我对我们设置的全新Web服务器感到疯狂(请注意,在我们配置相同的其他Web服务器上不会发生此问题)。在第一次加载和asp.net应用程序时,页面会挂起一整分钟,然后在浏览器中显示该页面。加载第一页后,一切都运行得很快。

注1:您可能会说该应用程序是第一次编译。但我已经排除了这一点。我将跟踪消息放在应用程序中,所有跟踪消息都在请求页面的一秒钟内运行。因此,应用程序立即编译并运行。但是当应用程序完成渲染页面并打印出我的上一条跟踪消息时,没有任何反应。在将完成的页面沿http传输到用户的浏览器之前,IIS正在幕后做一整分钟。

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

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

注4:我们看了一下任务管理器,看看IIS是否正在飙升并占用大量资源来处理某些事情。但那不是它。在浏览器显示页面之前,我们确实看到了非常快的峰值达到50%,但在之前的60秒内,服务器上的使用率只有1%。

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

有什么想法吗?我们在这里是一个亏损。我们所有其他Web服务器的设置方式相同,工作正常,但这是一个新安装。那么必须有一个错过的配置设置或者可能需要安装的东西?

谢谢,

布赖恩

3 个答案:

答案 0 :(得分:1)

如果您有权访问服务器,请确保将应用池回收实际记录到事件日志

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

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

See more here

然后检查是否有任何回收。

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

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

如果您想深入挖掘,可以查看事件跟踪ETW。

  1. logman查询提供程序
  2. 将IIS / ASP.NET相关Guids保存到iisproviders.txt等文件中
  3. logman start ExampleTrace -pf iisproviders.txt -ets -rt
  4. 再现
  5. LogParser“SELECT * FROM ExampleTrace”-i:ETW
  6. logman stop ExampleTrace -ets
  7. 您可以在Troubleshooting appdomain restarts and other issues with ETW tracing

    找到更多信息

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

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

    windbg -p [process id of the app pool]
    .loadby sos mscorwks
    g
    

    从那里拿走它。如果有异常,进程崩溃等,你应该能够抓住它......

    一旦我们遇到这样一个奇怪的服务器问题并重新安装.NET解决了这个问题,仍然不确定是什么罪魁祸首。

答案 1 :(得分:0)

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

请参阅herehere

答案 2 :(得分:0)

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

根据您的上一条评论,

  

我可以多次停止/启动IIS,应用程序总是立即运行。我认为这是好的。但是现在我又试了一次(它在过去的几个小时里一直处于空闲状态),现在又回到了第一次请求上。

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