服务器——关于IIS应用程序池回收机制的几项常用设置
原文:http://bbs.kuaibiao.cn/thread-5857-1-1.html
常规设置
对启动模式、发生配置更改时禁止回收、固定时间间隔(分钟)、禁用重叠回收、闲置超时(分钟)这几项做一个说明。
快速设置:
1、打开IIS,在应用程序池上点击右键选择高级设置。
2、常规分组下将启动模式选择为AlwaysRunning
3、回收分组下将发生配置更改时禁止回收选择为True,固定时间间隔(分钟)将默认的1740改为0、禁用重叠回收选择为True
4、进程模型分组下将闲置超时(分钟)从默认的20改为0
关于设置的说明
- 启动模式
启动模式选项有两个值:OnDemand和AlwaysRunning。顾名思义,OnDemand意味着当没有HTTP请求到达网站时,网站处于关闭的状态;而AlwaysRunning是不管是否有请求,网站一直运行。
两个选项的差异在于,一般来说动态Web站点在启动时往往会执行一些初始化动作,这些动作又是比较耗时的,例如ASP.NET的 Application_Start函数,往往执行的时间较长。因此OnDemand选项会导致前几个Web站点的请求执行时间较长,给用户带来不好的体验,AlwaysRunning则没有这个问题。
- 发生配置更改时禁止回收
通常情况下,Web 网站的配置是在w3wp.exe工作进程启动时加载的。如果管理员在网站工作状态下对应用程序池配置作出了修改,那么当前的w3wp.exe工作进程是没有办法自动加载新的配置信息的。为了让Web 网站迅速应用最新的应用程序池配置,必须停止当前正在运行的w3wp.exe进程,然后再创建一个新w3wp.exe进程,以便在新进程创建时加载最新的应用程序池配置。其实这个过程就是一次回收。当这个配置项设置为True时,意味着当前管理员的修改不会引起应用程序池的回收,而是要等到某个应用程序池回收条件满足时再顺便加载应用程序池最新的配置项目,而这样的配置会有效地避免管理员误操作给生产环境带来的影响。
- 固定时间间隔(分钟)
固定时间间隔配置项的含义是自应用程序池上次回收/启动以来,持续运行了固定时间间隔的时长后,进行一次回收。这个选项最有意思的是默认值即1740分钟。1740分钟除以60等于29个小时。为什么不是24小时呢?答案是29是大于24的最小质数。换句话说,这个数字是微软IIS的项目经理拍脑袋想出来的,没什么理由!猜想的原因是:
(1)Web应用程序运行一段时间必须要回收一次,以保证性能。
(2)一个编写和测试良好的Web应用程序无须每天回收一次。
回归问题本质,设置这个选项有意义吗?初看挺有意义的,把默认值改为1440分钟不就每天都回收了吗?但是可能忽略了一个问题,那就是管理员很难清楚地记得应用程序池上次是哪天几分几秒启动/回收的?如果这个时间起算点没有搞清楚,那就意味着应用程序池的回收是一种随机的状态。就快表的大量用户配置情况来看,90%以上的应用程序池都是默认值1740分钟,也许这就是某些情况下Web网站会出现忽然变慢又莫名其妙地恢复的原因吧。正确的做法应该是将这个配置项设置为0,永久地禁用这个选项。
- 禁用重叠回收
禁用重叠回收是一种典型的程序员的说法,这个选项的默认值是False。综合来看这个选项:禁用重叠回收是False。前面禁用是否定,后面False也是否定,双重否定即肯定,也就是默认情况下重叠回收是启用的。
下面需介绍什么是重叠回收(Overlapped Recycling)。所谓重叠回收是指当回收发生时,先创建一个新的w3wp.exe工作进程,然后把用户的请求通过IIS 路由到新的进程中处理,待老进程中全部的请求处理完毕再停用老进程。所谓重叠是指w3wp.exe新老工作进程重叠。相应地,非重叠回收的回收流程是:先停止老的w3wp.exe工作进程,再启动一个新的w3wp.exe工作进程。两种回收方式各有优点:重叠回收,回收执行周期相对较长,但是不影响用户使用,不中断业务;非重叠回收,回收执行周期短,但是会中断老进程中用户的操作。一般而言,在生产环境为了保证业务执行不中断,管理员都会选择重叠回收的方式。
- 闲置超时(分钟)
这个选项是指w3wp.exe进程自处理结束最后一个用户HTTP请求结束之后,连续等待指定的超时时间仍然没有接收到新的HTTP 请求时,就会关闭网站的w3wp.exe工作进程。
为什么默认值是20分钟呢?答案很简单,因为默认的Session超时时间就是20分钟。闲置超时和Session超时时间保持一致,可以保证不会出现用户交互错误。设置闲置超时时间,是为了在Web网站空闲时关闭工作进程,腾出更多的资源给别的网站和应用程序使用。但是下次网站启动时会重新执行网站初始化函数,导致前几个HTTP请求处理缓慢。