.NET 应用程序在 IIS-8 Windows Server 2012 中加载速度极慢
.NET applications load extremely slowly in IIS-8 Windows Server 2012
在仔细阅读堆栈交换和大量 MSDN 文章数月之后,我来到社区寻求帮助。我是我所在组织的 IIS 管理员,我发现一个问题,即当对 .NET 应用程序进行更改时,首次向页面提交请求时,页面需要很长时间才能加载。当我说很长时间时,我有时会说五分钟到半小时不等。我已经尝试了很多项目来解决这个问题。但我相信某个地方隐藏了一个配置设置导致了这个问题。一旦页面加载一次,它的加载时间就正常了。无论应用程序如何,它似乎都会发生,尽管有些需要比其他应用程序更长的时间。它也不一致。有时更改后需要七分钟才能加载。下一次进行更改时,同一个应用程序可能需要 17 分钟才能加载...更改通常非常小,一个新的图像框被移入,或者一个新的 link 添加。没什么大不了的。
如果某个应用首次加载需要 20 秒到 1 分钟,我们并不担心。但是十分钟、十五分钟,有时半小时的加载时间是不可接受的。
无论它是否是静态内容应用程序,或者它是否正在访问数据源,都会出现此问题。与数据源的任何连接都在应用程序级别配置。我们只在少数应用程序上使用它,并且我验证了连接信息在 web.config 中对于那些确实接触到数据源的应用程序是有效的。我们在每个应用程序上使用 Windows 身份验证。
我们 运行 一个三层环境,所有 运行ning Windows Server 2012 R2 Standard 具有 16gb 内存和多核 CPU 设置。我们 运行 在 .NET 4.0.30319 上安装 IIS 8.5。应用程序池正在利用支持 32 位应用程序(应用程序是)的集成管道。这些是 VMware 主机。服务器每周重新启动一次。
我们的测试或开发服务器上不会出现此问题。只有我们的生产服务器。一天中的什么时间进行更改并不重要。
2016 年 12 月,我将我们所有的 .NET 应用程序从旧的 Windows 2003 系统 运行ning IIS 6.0 移植到新的 Windows 2012 系统。虽然我们与开发人员合作更改应用程序中的任何硬编码主机名,但我们最终不得不安装 CNAME 主机记录以将旧主机名重定向到新主机名。这个问题似乎是在这个时候开始的。
我注意到的一个问题是开发人员在调试模式下编译所有应用程序。我们将此设置更改为 false,但在某些情况下它的帮助很小。
我也尝试了以下方法:
隔离给定的应用程序并将应用程序池设置为始终 运行。还尝试将应用程序池身份更改为 运行 作为网络服务或作为服务帐户用户。
添加应用程序初始化角色并在 IIS 中配置始终 运行 应用程序池并在应用程序级别启用预加载。 - 当我看到它没有任何变化时,我就放弃了。
我将我们 test/dev 服务器之间的所有角色结合起来,生产环境中不会出现问题。
在应用程序池级别禁用空闲超时。
比较测试和生产之间关于编译设置、超时等的设置
None 这些更改产生了任何影响。我找不到任何区分没有问题的 test/dev 框和有问题的生产服务器的地方。请让我知道您可能需要哪些其他信息,感谢您提前提供的帮助!
谢谢,
迈克
您想预编译您的页面,这样它们就不会先编译 运行。 IIRC 这只是一个简单的 web.config 添加。
https://msdn.microsoft.com/en-us/library/bb398860.aspx
老实说,每页 5 分钟的编译时间似乎存在更大的问题。我从未见过新的 aspx 编译时间超过几秒钟。
Neil N 的回答很有道理,但我肯定会检查一下您的所有服务器的设置是否相同。
如果这不是罪魁祸首,我的下一站肯定是查看事件查看器的 'Application' 部分。它可能会发出一些有意义的警告,以帮助您更接近问题的根源。
我们发现了问题。我们的 AV 软件是罪魁祸首。特别是 Trend Micro Deep Security。
当发出请求并且程序将在临时区域编译时(C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 文件) - 我注意到构建文件似乎需要很长时间。预编译看到了相同的行为。我要求我们的 LAN 管理员为这个特定文件夹添加一个例外。完成后,首次加载仅需 5-10 秒,这是可以接受的。再次感谢您的意见。
在仔细阅读堆栈交换和大量 MSDN 文章数月之后,我来到社区寻求帮助。我是我所在组织的 IIS 管理员,我发现一个问题,即当对 .NET 应用程序进行更改时,首次向页面提交请求时,页面需要很长时间才能加载。当我说很长时间时,我有时会说五分钟到半小时不等。我已经尝试了很多项目来解决这个问题。但我相信某个地方隐藏了一个配置设置导致了这个问题。一旦页面加载一次,它的加载时间就正常了。无论应用程序如何,它似乎都会发生,尽管有些需要比其他应用程序更长的时间。它也不一致。有时更改后需要七分钟才能加载。下一次进行更改时,同一个应用程序可能需要 17 分钟才能加载...更改通常非常小,一个新的图像框被移入,或者一个新的 link 添加。没什么大不了的。
如果某个应用首次加载需要 20 秒到 1 分钟,我们并不担心。但是十分钟、十五分钟,有时半小时的加载时间是不可接受的。
无论它是否是静态内容应用程序,或者它是否正在访问数据源,都会出现此问题。与数据源的任何连接都在应用程序级别配置。我们只在少数应用程序上使用它,并且我验证了连接信息在 web.config 中对于那些确实接触到数据源的应用程序是有效的。我们在每个应用程序上使用 Windows 身份验证。
我们 运行 一个三层环境,所有 运行ning Windows Server 2012 R2 Standard 具有 16gb 内存和多核 CPU 设置。我们 运行 在 .NET 4.0.30319 上安装 IIS 8.5。应用程序池正在利用支持 32 位应用程序(应用程序是)的集成管道。这些是 VMware 主机。服务器每周重新启动一次。 我们的测试或开发服务器上不会出现此问题。只有我们的生产服务器。一天中的什么时间进行更改并不重要。
2016 年 12 月,我将我们所有的 .NET 应用程序从旧的 Windows 2003 系统 运行ning IIS 6.0 移植到新的 Windows 2012 系统。虽然我们与开发人员合作更改应用程序中的任何硬编码主机名,但我们最终不得不安装 CNAME 主机记录以将旧主机名重定向到新主机名。这个问题似乎是在这个时候开始的。
我注意到的一个问题是开发人员在调试模式下编译所有应用程序。我们将此设置更改为 false,但在某些情况下它的帮助很小。
我也尝试了以下方法:
隔离给定的应用程序并将应用程序池设置为始终 运行。还尝试将应用程序池身份更改为 运行 作为网络服务或作为服务帐户用户。
添加应用程序初始化角色并在 IIS 中配置始终 运行 应用程序池并在应用程序级别启用预加载。 - 当我看到它没有任何变化时,我就放弃了。
我将我们 test/dev 服务器之间的所有角色结合起来,生产环境中不会出现问题。
在应用程序池级别禁用空闲超时。
比较测试和生产之间关于编译设置、超时等的设置
None 这些更改产生了任何影响。我找不到任何区分没有问题的 test/dev 框和有问题的生产服务器的地方。请让我知道您可能需要哪些其他信息,感谢您提前提供的帮助!
谢谢, 迈克
您想预编译您的页面,这样它们就不会先编译 运行。 IIRC 这只是一个简单的 web.config 添加。
https://msdn.microsoft.com/en-us/library/bb398860.aspx
老实说,每页 5 分钟的编译时间似乎存在更大的问题。我从未见过新的 aspx 编译时间超过几秒钟。
Neil N 的回答很有道理,但我肯定会检查一下您的所有服务器的设置是否相同。
如果这不是罪魁祸首,我的下一站肯定是查看事件查看器的 'Application' 部分。它可能会发出一些有意义的警告,以帮助您更接近问题的根源。
我们发现了问题。我们的 AV 软件是罪魁祸首。特别是 Trend Micro Deep Security。
当发出请求并且程序将在临时区域编译时(C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 文件) - 我注意到构建文件似乎需要很长时间。预编译看到了相同的行为。我要求我们的 LAN 管理员为这个特定文件夹添加一个例外。完成后,首次加载仅需 5-10 秒,这是可以接受的。再次感谢您的意见。