我正在开发基于.NET平台的网站。我通常将这些站点部署在本地IIS上,以便在上线之前对其进行测试并查看其功能。但是,每次我重新启动Windows时,站点似乎都需要很长时间才能首次运行。
我了解JIT,也知道这个问题,但是它不能回答我的问题。
每次重新启动Windows都会发生JIT吗?它与w3wp.exe进程的创建有关吗?为什么站点在每次重新启动后对第一个请求的响应如此缓慢?
我正在开发基于.NET平台的网站。我通常将这些站点部署在本地IIS上,以便在上线之前对其进行测试并查看其功能。但是,每次我重新启动Windows时,站点似乎都需要很长时间才能首次运行。
我了解JIT,也知道这个问题,但是它不能回答我的问题。
每次重新启动Windows都会发生JIT吗?它与w3wp.exe进程的创建有关吗?为什么站点在每次重新启动后对第一个请求的响应如此缓慢?
Answers:
这个问题是JIT编译的。应用程序池需要一些时间来构建库,然后才能开始处理它们。可以通过使用预热脚本来加快速度,但这是需要发生的事情。它还取决于您使用的是网站还是Web应用程序项目。每个页面的网站都是JIT网站,因此第一命中速度很慢,每个新页面命中都需要额外的编译时间。Web应用程序项目是经过预编译的,因此不会遭受严重的打击,但是仍然需要加载库。您拥有的库/工具越多,受到的打击就越严重。以下是一些讨论热身的链接:
http://weblogs.asp.net/gunnarpeipman/archive/2010/01/22/iis-application-warm-up-module.aspx http://blogs.iis.net/steveschofield/archive/2009/05/30 /application-pool-warm-up.aspx https://stackoverflow.com/questions/2063461/iis-web-applications-warmup http://sharepoint.smayes.com/2011/06/application-pool-specific-warm -向上脚本/
对第一个请求的反应较慢是因为IIS仅在其第一个传入请求上启动/加载站点或应用程序池。在固定的时间后,没有新的传入请求到达服务器IIS再次停止该站点(应用程序池回收)。
ASP.NET 4.0具有一项称为自动启动的新功能。使用此功能,您可以将应用程序池或单个站点设置为在任何请求之前启动自己。这是在启动时间(IIS启动时)或更新ASP.NET站点(停止站点)时触发的。
<applicationPools>
<add name="MyAppPool" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
<sites>
<site name="MySite" id="1">
<application path="/" serviceAutoStartEnabled="true" />
</site>
</sites>
您需要IIS 7.5才能使用它。
例如,当自动启动启动时,还有一个选项可以执行某些额外的任务。将数据预加载到缓存中。
IIS具有低流量网站的烦人(有时)功能。它回收未使用的工作进程–导致第一个用户访问该站点;有时会有非常长的延迟(超过30秒)。http://dotnettimes.wordpress.com/2014/03/24/fixing-slow-initial-load-for-iis-web-site/