IIS 网站应用程序初始化和预加载

2023-08-24 13:37:15 4380

一、进行初始化和预加载的原因

IIS 网站在第一次请求时,需要进行了初始化操作,而这个初始化操作耗费了时间。当第二次请求时,不再需要初始化操作,因此变快了。当网站在一段时间内,没有接收到请求时,IIS 回收了资源,当再次接收请求时,又重新进行初始化操作。IIS 的初始化和资源回收,是为了网站稳定运行,内存资源得到充分利用管理。IIS 默认情况下 29 小时回收一次资源。下面我们通过设置改变 IIS 默认行为,使网站既能保持稳定运行,又能提高网站响应速度,最终提高用户体验。

 

二、安装 IIS 应用程序初始化功能

1、打开“服务器管理器”,左侧选择“IIS”,右侧列表中,鼠标右键选择“添加角色和功能”。

image.png

2、弹出“添加角色和功能向导”,在向导中“服务器角色”里选择“应用程序初始化”,右侧显示描述为,应用程序初始化先执行耗费资源的 Web 应用程序初始化任务,然后再为网页提供服务。

image.png


三.设置网站应用程序池
1、打开 IIS 管理器,左侧展开“应用程序池”节点,右侧选择某个网站的应用程序池,鼠标右键“高级设置”。

image.png

2、在应用程序池高级设置中,设置 4 项。

常规 > 启动模式,设置为“AlwaysRunning”。将应用程序池配置为始终运行模式下运行。

回收 > 固定时间间隔(分钟),设置为“0”。一个时间段(以分钟为单位),超过该时间后,应用程序池将回收。值为 0 意味着应用程序池不会按固定间隔回收。

回收 > 特定时间,添加一组时间为凌晨 4 点。应用程序池进行回收的一组特定的本地时间(24 小时制)。

进程模型 > 闲置超时(分钟),设置为“0”。工作进程在关闭之前可以保持闲置状态的时间(以分钟为单位)。如果某个工作进程既未处理请求,也未收到任何新的请求,则将进入闲置状态。

 

设置解释:将某网站的应用程序池设置为始终运行,工作进程不进入闲置状态,不按照固定时间间隔回收程序池,采用特定时间回收程序池,并设置回收时间为每天凌晨 4 点回收。设置凌晨 4 点回收,也就是考虑此时网站访问人数相对较少,服务器资源相对较多,最大降低对用户的影响。另外,需要注意的是,回收将导致网站内存信息消失,例如 session 存放在内存,会导致 session 消失。不只是回收会导致 session 丢失,其它也会导致,例如更新网站配置,手动重启回收等,都会导致 session 丢失。可考虑其他方式保存 session,例如数据库或 cookie 等。

 

四、启用网站预加载设置
通过预加载工作进程减少第一个请求的响应时间。IIS 应用程序初始化允许网站在第一个请求到达之前,在工作进程启动后立即配置要预加载的 Web 应用程序。通过预加载应用程序,工作进程能够减少响应第一个请求所需的时间。在请求到达服务器时,已经执行了依赖项的加载和初始化,例如数据库连接,.NET Framework 以及 ASP.NET 应用程序和依赖项的即时编译。

1、打开 IIS 管理器,左侧展开“网站”节点,在网站上鼠标右键选择“管理网站 > 高级设置”。

image.png

2、在“高级设置”设置“预加载已启用”为“true”。

image.png


五、设置初始化请求地址

IIS 应用程序初始化可以提高用户体验。通过指定要执行的一组 URL 来初始化应用程序,并且可以将 IIS 配置为在应用程序完成初始化之前返回备用响应(如静态内容)。
Web.config 配置文件中也可以设置以上属性:

1. <system.webServer>

2. <applicationInitialization

3. doAppInitAfterRestart="true"

4. skipManagedModules="true"

5. remapManagedRequestsTo="filename.htm">

6. <add initializationPage="/default.aspx" hostName="myhost"/>

7. </applicationInitialization>

8. </system.webServer>

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: