1

在仔细阅读堆栈交换和大量 MSDN 文章数月后,我来到社区寻求帮助。我是我的组织的 IIS 管理员,我一直看到一个问题,即当对 .NET 应用程序进行更改时,当请求首次提交到页面时,页面需要很长时间才能加载。当我说很长时,我说的时间从五分钟到半小时不等。我已经尝试了许多项目来解决这个问题。但我相信某处隐藏的配置设置会导致问题。一旦页面加载一次,它的加载时间就正常了。无论应用程序如何,它似乎都会发生,尽管有些需要比其他应用更长的时间。也不一致。有时,更改后需要 7 分钟才能加载。下次进行更改时,相同的应用程序可能需要 17 分钟才能加载……更改通常非常小,新的图像框被移入或添加了新的链接。没什么大不了的。

如果一个应用程序第一次加载需要 20 秒到 1 分钟,我们并不担心。但是十、十五分钟,有时甚至是半小时的加载时间是不可接受的。

无论它是否是静态内容应用程序,或者它是否正在访问数据源,都会发生此问题。任何与数据源的连接都是在应用级别配置的。我们只在少数应用程序上使用它,并且我验证了连接信息在 web.config 中对于那些确实接触到数据源的应用程序是有效的。我们在每个应用程序上都使用 Windows 身份验证。

我们运行一个三层环境,全部运行 Windows Server 2012 R2 Standard,具有 16gb 内存和多核 CPU 设置。我们在 .NET 4.0.30319 上运行 IIS 8.5。应用程序池正在使用支持 32 位应用程序(即应用程序)的集成管道。这些是 VMware 主机。服务器每周重新启动一次。我们的测试或开发服务器上不会出现此问题。只有我们的生产服务器。在一天中的什么时间进行更改并不重要。

2016 年 12 月,我将所有 .NET 应用程序从运行 IIS 6.0 的旧 Windows 2003 系统移植到新的 Windows 2012 系统。虽然我们与开发人员合作更改应用程序中的任何硬编码主机名,但我们最终不得不安装 CNAME 主机记录以将旧主机名重定向到新主机名。这个问题似乎是在这个时候开始的。

我注意到的一个问题是开发人员在调试模式下编译所有应用程序。我们将此设置更改为 false,但在某些情况下它只提供了一点帮助。

我也尝试了以下方法:

  • 隔离给定的应用程序并将应用程序池设置为始终运行。还尝试更改应用程序池标识以作为网络服务或服务帐户用户运行。

  • 在 IIS 中添加应用程序初始化角色和配置以始终运行应用程序池并在应用程序级别启用预加载。- 当我看到它没有改变时,我支持它。

  • 我将我们的测试/开发服务器之间的所有角色结合起来,而生产中不会发生问题。

  • 在应用程序池级别禁用空闲超时。

  • 比较测试和生产之间关于编译设置、超时等的设置

这些变化都没有任何区别。我找不到任何可以区分没有问题的测试/开发框和有问题的生产服务器的东西。请让我知道您可能需要哪些其他信息,我提前感谢您的帮助!

谢谢,迈克

4

3 回答 3

2

我们发现了问题。我们的 AV 软件是罪魁祸首。特别是趋势科技 Deep Security。

当发出请求并且程序将在临时区域(C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files)中编译时 - 我注意到它似乎需要很长时间用于构建文件。预编译看到了相同的行为。我要求我们的 LAN 管理员为这个特定文件夹添加一个例外。一旦完成,第一次加载只需 5-10 秒,这是可以接受的。再次感谢您的输入。

于 2017-06-29T18:28:20.200 回答
0

Neil N 的回答是有道理的,但我肯定会检查并查看该设置是否在您的所有服务器中都相同。

如果这不是罪魁祸首,我的下一站肯定是查看事件查看器的“应用程序”部分。它可能会抛出一些有意义的警告,以帮助您更接近问题的根源。

于 2017-06-29T15:34:56.507 回答
0

你想预编译你的页面,这样它们就不会在第一次运行时被编译。IIRC 它只是一个简单的 web.config 添加。

https://msdn.microsoft.com/en-us/library/bb398860.aspx

虽然说实话,每页 5 分钟的编译时间似乎存在更大的问题。我从来没有见过一个新的 aspx 编译需要超过几秒钟的时间。

于 2017-06-29T15:28:36.977 回答