6

环境:Windows Server 2003;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 挂起。因此,它与第一次通过 http 发送渲染页面时调用 ASP.NET 库有关。此外,由于应用程序已经编译并立即运行,因此只是 asp.net 的一部分将呈现的页面发送到用户的浏览器导致延迟。

有任何想法吗?我们在这里是一个损失。我们所有的其他 Web 服务器都以相同的方式设置并且工作正常,但这是一个新安装。所以一定有一个配置设置被遗漏了,或者可能需要安装一些东西?

谢谢,

布赖恩

4

3 回答 3

1

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

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

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

在这里查看更多

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

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

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

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

  1. logman 查询提供程序
  2. 将 IIS /ASP.NET 相关的 Guid 保存到 iisproviders.txt 之类的文件中
  3. logman start ExampleTrace -pf iisproviders.txt -ets -rt
  4. 复制
  5. LogParser "SELECT * FROM ExampleTrace" -i:ETW
  6. logman 停止 ExampleTrace -ets

您可以在此处找到更多信息疑难解答 appdomain 重新启动和 ETW 跟踪的其他问题

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

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

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

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

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

于 2012-09-28T19:13:36.480 回答
0

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

这里这里

于 2012-08-30T20:07:56.290 回答
0

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

根据你最后的评论,

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

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

于 2012-11-24T23:36:26.963 回答