IIS部署冷查询



部署了一个.net核心应用程序,但遇到第一个请求时速度很慢,基本上是2秒,然后在第二个请求和更多请求时,只需要不到一秒。

我目前部署了预编译查询,预编译模型。我还将IIS设置为启动模式总是运行空闲超时为0,预加载启用为true。任何遇到并解决这一问题的人都将对有很大帮助

启动时间似乎不是单一的原因,而是进程启动、加载、网络运行时、读取配置、加载程序集等所需的总时间。您的站点处理请求的速度很快,除非它处于第一个请求的冷启动阶段,或者当它回收或重新启动时。但第一次请求的延迟是不可避免的。

我们可以做的是尽最大努力减少计划外的重新启动和回收,但您的应用程序池在生产中偶尔仍会回收,有时您的网站必须遇到挂起、CPU过高、内存泄漏或其他问题才能回收。因此,以正确的方式重置、重新启动和回收IIS,冷启动时间不会成为真正的问题。

如何最大限度地提高IIS应用程序池的可用性:

  1. 安装应用程序初始化模块

要检查是否已安装:

appcmd list config /section:globalModules | findstr warmup.dll
  1. 自动启动应用程序池,无需等待启动请求

启用"AlwaysRunning;应用程序池的模式

appcmd set apppool TestApp /startMode:AlwaysRunning
  1. 设置应用程序初始化,以便在应用程序池启动时预热应用程序

;preloadEnabled";属性需要在应用程序中使用定义,这将确保IIS工作进程启动时对于应用程序池,它还将初始化我们的应用程序并触发我们的预热代码。

appcmd set app "TestApp/" /preloadEnabled:true

然后你需要确保你有应用程序初始化和global.asax中Application_Start处理程序中的预热代码需要为应用程序的其他部分配置预热

  1. 防止应用程序池意外关闭

即使startMode为";AlwaysRunning";,IIS仍然支持空闲超时设置。这会导致您的工作进程在不活动的时间。为了防止这种情况,另一个应用程序池配置更改:

appcmd set apppool "TestApp" /processModel.idleTimeout:00:00:00
  1. 为应用程序池设置最佳回收策略

即使我们的应用程序池仍然很热导致应用程序重新启动的,如对应用程序的更改web.config.

如果您正在对web应用程序进行更改,并且希望最小化重新启动,您可以设置:

appcmd set config "TestApp" /section:httpRuntime /fcnMode:Disabled
appcmd set config "TestApp" /section:compilation /numRecompilesBeforeAppRestart:1000

这将阻止应用程序在任何更改时重新启动,除非根web.config.

我建议您阅读Mike Volodarsky的这篇文章,您可以从中获得更多有用的信息。