环境: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服务器的设置方式相同,工作正常,但这是一个新安装。那么必须有一个错过的配置设置或者可能需要安装的东西?
谢谢,
布赖恩
答案 0 :(得分:1)
如果您有权访问服务器,请确保将应用池回收实际记录到事件日志
cscript adsutil.vbs获取w3svc / AppPools / DefaultAppPool / LogEventOnRecycle
您可以将其设置为记录所有内容 cscript adsutil.vbs设置w3svc / AppPools / DefaultAppPool / LogEventOnRecycle 255
然后检查是否有任何回收。
应用程序初始化,创建工作进程,线程,加载应用程序域以及所有引用dll可能需要一些时间,这是正常的,但是1分钟的延迟可能是其他原因。
尝试在服务器上预编译应用程序,看看是否有帮助 aspnet_compiler -m / LM / W3SVC / [site id] / Root / [your appname]
如果您想深入挖掘,可以查看事件跟踪ETW。
您可以在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设置与其他设置不同。您是否尝试过将配置文件复制到此服务器?似乎有证书选项以及注册表修改,您可以执行这些操作以删除页面初始加载期间的一些延迟时间(预编译除外)
答案 2 :(得分:0)
您可能想要查看的一件事是,您的网页加载是否有任何数据库访问权限。这可能会阻止在初始页面加载期间创建页面。然后当缓存查询时(通过db引擎或其他缓存机制,如memcached),后续页面加载正常工作。
根据您的上一条评论,
我可以多次停止/启动IIS,应用程序总是立即运行。我认为这是好的。但是现在我又试了一次(它在过去的几个小时里一直处于空闲状态),现在又回到了第一次请求上。
这可能意味着缓存已过期,因此需要再次访问数据库,导致页面加载延迟。