为什么一个没有代码的ASP.Net 2.0应用程序首次运行需要2分钟才能加载?

3
我已经在Server Fault上提出了这个问题,但是没有得到解决。所以我希望另一位ASP.Net开发人员能够遇到我的问题。
我有一个运行II6的Windows VPS,并正在将我的ASP.Net应用程序迁移到该服务器。当我导航到其中一个应用程序时,需要大约2分钟才能完成任何操作。我创建了一个“hello world”应用程序并上传它,第一次加载也需要2分钟。如果我重新启动应用程序池,我会得到完全相同的问题。
与另一个应用程序共享应用程序池的任何应用程序都将在成功加载应用程序池中的一个应用程序后工作。
即bob.example.com和jane.example.com在称为ABC1的应用程序池中。如果我访问bob,它将需要2-3分钟才能加载。在加载bob之后,Jane将立即工作,bob也将立即工作。闲置5-10分钟或者如果我重新启动应用程序池,在bob和jane正常工作的时间内,如果dave.example.com在XYZ9应用程序池中加载,那么我必须等待2-3分钟才能加载。
有人遇到过这个问题吗?我现在非常恐慌,因为我需要在周末结束之前将它们迁移。
哦,那些站点在旧服务器上立即工作。唯一的区别是旧服务器是32位的,而新服务器是64位的。

你有没有其他正在进行大量磁盘访问的进程?磁盘是否可能存在硬件故障? - Inshallah
不,这只是一个全新的 Windows Server 2003 64 位安装。没有安装任何非标准应用程序。 - djdd87
你有检查过Windows事件日志吗?特别是应用程序日志可能包含有关应用程序初始化期间出现问题的线索。 - Jacob
没有错误或警告。 - djdd87
我也遇到了这个问题。我在凌晨2点惊慌失措地解决了它,然后立即上床睡觉,所以对解决方案有些模糊。我会检查当时的笔记并回到这里。 - Rex M
显示剩余2条评论
9个回答

2
你说启动需要两分钟时间。那段时间系统在做什么?特别是,w3wp.exe 在做什么?
我建议你运行SysInternals' Process Monitor来了解一下正在发生的情况。筛选出有用的信息可能需要一些时间,但这将是值得的。
特别是,这个工具的最新版本可以为你提供有关进程正在进行的网络调用的信息,如果你发现存在证书、代理服务器或两者都有问题,这将会非常有用。

w3wp.exe在高负载期间使用了8-16%的CPU。不幸的是,我无法让那个软件工作! - djdd87
你无法让进程监视器起作用吗?另外,如果w3wp.exe占用的CPU很少,那么你的总CPU使用率是多少? - John Saunders
没有其他任何影响。W3WP独立运行。 - djdd87

2

如果您请求一个普通的 .htm 文件而不是 .aspx 文件,会发生什么?区别在于 HTML 文件不会通过 ASP.NET 处理,因此,如果您仍然遇到缓慢的问题,那么您就知道这更多是 IIS 的问题,而不是 ASP.NET 的问题。

虽然这不是一个答案,但它是解决问题的一步。


HTML页面加载瞬间完成,抱歉,在此帖子中忘记提到了! - djdd87

2
在共享虚拟主机(VPS)上,我发现磁盘访问可能会非常缓慢,并且在一天中的不同时间会有所变化。当应用程序池启动时,进程必须从磁盘加载,而且(可能)需要加载 .Net 框架。
(我在这里提出了类似的问题here。)
实际上,我的虚拟主机有时非常缓慢,因此我认为其中2分钟可以归因于磁盘I/O速度。如果您的虚拟服务器内存较低,则情况会更糟。
我使用服务器监控服务每30分钟访问一个URL。这有助于保持应用程序已加载。ASP.net 4.0具有一些功能承诺有所帮助。

1

我禁用了回收,这解决了一切...差不多。一旦加载了一次,它就永久加载了。但仍然没有解决根本问题,而且1and1拒绝帮助处理IIS相关的问题。


0

可能是服务器在验证已签名程序集证书吊销链列表时出现问题。您可以禁用CRL检查,看看是否表现更好。

更新

要禁用证书吊销列表(CRL)检查:

  • 打开Internet Explorer
  • 转到“工具” ->“Internet选项…”
  • 转到“高级”选项卡
  • 找到“安全”部分,取消选中“检查发布者证书吊销”选项。

这将全局禁用整个服务器的CRL检查,并具有禁用authenticode CRL检查的副作用(即ASP应用程序池检查)。我不知道是否需要单独为IE的x86版本(适用于32位应用程序)和IE的x64版本(适用于64位应用程序)执行此操作。


什么是CRL检查,如何禁用它们? - djdd87
1
恐怕这没有任何区别。 - djdd87
当然,你需要在服务器上完成这个任务,而不是在客户端上。 - Remus Rusanu
我是在服务器上进行的。我取消了勾选框并点击了“确定”。然后我尝试从客户端再次访问该页面,但没有任何改变。它仍然需要2-3分钟。 - djdd87
好的,也许不是CRL检查的问题。 - Remus Rusanu

0

这可能只是初始应用程序域编译启动成本,但因为您正在使用VPS而被放大。

您的规格是什么?


这是一台8核心2.1GHz的AMD Opteron服务器,内存为1GB。旧服务器配置较低,只有648MB的RAM,但仍能正常运行。旧服务器也是VPS,网站加载速度很快。 - djdd87
这是VPS本身的规格而不是主机吗?如果是,那么显然这不是问题 :) 另一个想法是在出现这些延迟时在该框上运行http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx,并查看正在进行的IO /注册表访问。 - Kieran Benton
那个软件似乎无法工作。当我尝试捕获时,它只会显示“无法加载进程监视器设备驱动程序”。 - djdd87
那真的是VPS客户端的规格吗?您是否以管理员身份运行进程监视器?有没有安装任何反病毒软件?这也可能导致您的问题。您使用哪个托管公司? - Kieran Benton
1
没有AV,1&1表示他们不支持IIS,并且他们不会回答支持电子邮件。 - djdd87
显示剩余2条评论

0

我对这个问题一无所知。

不过,我在某个地方读到/听到过 - 在这种情况下,当您应该首先在本地网络中检查域名时,可能会将您的请求发送到互联网上进行检查(可能与DNS有关)。

这完全基于我能回忆起来的人们在一篇文章/播客中讨论类似问题的内容。


服务器是外部托管的。所以我不认为这会有任何影响?无论如何,还是谢谢。 - djdd87
我仍然认为这与网络有关。尝试ping服务器并查看第一次和后续尝试所需的时间。 - shahkalpesh
第一次和后续尝试的ping始终在40-60毫秒左右。 - djdd87

0

你的应用程序是否与其他Web应用程序共享同一个应用程序池?换句话说,你是否正在使用第三方VPS并且无法控制应用程序池的使用情况?如果是这样,那么其他应用程序的应用程序初始化代码可能是导致启动时间缓慢的原因。


嗨,我对应用程序池有完全的控制权。一个应用程序池中有2个应用程序,另一个应用程序池中有1个应用程序。它们都存在相同的问题。 - djdd87

0

应用程序池是以什么身份运行的?域或本地?

你正在使用哪些身份验证方式?如果是匿名的,它使用的是哪个帐户(域或本地)?

如果您在执行iisreset并访问网站后立即检查任务管理器,是否显示w3svc正在运行,还是我们需要等待它启动?

对于静态文件(例如.htm),情况如何?

这就是我的问题了 - 希望能有所帮助。


应用程序池正在使用“IWAM_plesk(默认)”作为用户。我假设所有用户帐户都是本地的,因为VPS是工作组的一部分,而不是域。静态页面加载非常快。w3svr不运行,只有w3wp.exe,它会立即加载。 - djdd87

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接