【问题标题】:.NET applications load extremely slowly in IIS-8 Windows Server 2012.NET 应用程序在 IIS-8 Windows Server 2012 中加载非常缓慢
【发布时间】:2017-06-29 15:26:22
【问题描述】:

在仔细阅读堆栈交换和大量 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 中进行配置以始终运行应用程序池并在应用程序级别启用预加载。 - 当我看到它没有改变时,我退出了。

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

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

  • 测试和生产之间在编译设置、超时等方面的比较设置

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

谢谢, 迈克

【问题讨论】:

    标签: asp.net performance iis-8 windows-server-2012-r2 deepsecurity


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • “无论它是否是静态内容应用程序,都会出现此问题”,而且长达一小时的等待表明这不是问题所在。他们的服务器被水洗了,他们需要把它吹走并重新安装一切新的东西,可能把它扔进该死的垃圾桶里,然后换一台更好的服务器。
      • @我承认我只浏览了他的 8 段。
      • 抱歉,这篇文章太长了,只是想尽可能详尽。感谢您迄今为止的投入。初始加载后所有页面都运行良好 - 我不知道服务器是否已完全被水洗 - 但如果我有机会从更高层重新构建,将采用该选项。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多