我在 IIS 8.0 中运行 ASP.NET MVC Web 应用程序。我的应用程序需要在接受请求之前进行预热。我们已经有一个流程可以在部署新代码时自动预热应用程序。但是,我们看到定期发生应用程序池回收事件,导致应用程序无法预热。
是否有检测应用程序池回收事件并执行脚本或某些代码的最佳实践?
答案1
您可以做几件事:
1. 应用程序初始化
您可以使用应用程序初始化模块随 IIS 8.0 提供
你可以在你的web.config
<applicationInitialization
doAppInitAfterRestart="true" >
<add initializationPage="/" />
</applicationInitialization>
initializationPage="/"
每次您的应用程序自动启动时,这将向您的应用程序的根目录()发送请求。
您还可以配置应用程序池的启动模式,Always Running
这意味着每次 IIS 重新启动时,它将确保立即启动您的应用程序池(如果从右键单击您的应用程序池,然后Advanced Settings
以及Preload
你的网站本身(右键单击网站Manage Site
然后Advanced Settings
2. 禁用空闲超时
Idle Time-out
此外,您可以通过将应用程序池的空闲时间更改为 0(无限)来禁用空闲超时(默认情况下,IIS 将在活动 20 分钟后关闭应用程序)
3. 禁用定期回收
默认情况Regular Time Interval (minutes)
下,IIS 会每 29 小时回收一次您的应用程序。
为了
答案2
根据我的经验,启用 AlwaysRunning 和 Preload 不会带来太大的速度提升。大部分等待时间都花在了动态编译(可以使用 aspx 预编译来修复)以及将程序集加载到内存和缓存上。