什么是应用程序池呢?这是微软的一个全新概念:应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置。因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。
Windows 2003同时支持两种工作模式,默认为ISS 6.0工作进程隔离模式。工作进程隔离模式防止一个应用程序或站点停止了而影响另一个应用程序或站点,大大增强了IIS的可靠性。那么如何设置两种工作模式呢?
启动IIS管理器,右击网站,选择“属性”,打开属性对话框。
在IIS 6.0工作进程隔离模式下,所有的应用程序代码都在隔离环境中运行,它们是如何进行隔离的呢?Windows 2003新增了应用程序池,工作进程隔离模式允许客户创建多个应用程序池,每个应用程序池都可以有不同的配置。因为这些应用程序池直接从内核(而非WWW服务)接收它们的请求,所以性能和可靠性得到了增强。要隔离运行在同一台计算机上但属于不同网站的Web应用程序,需要为每个网站创建单独的应用程序池。
创建应用程序池
在IIS管理器中,打开本地计算机,右键单击“应用程序池”,选择新建“应用程序池” (必须在工作进程隔离模式下才能建立应用程序池)。“应用程序池名称”框中,输入新的应用程序池名称。如果在“应用程序池 ID”框中出现的 ID (如:AppPool #1)不是您想要的,可进行重命名。如果您单击了“将现有应用程序池作为模板”,请在“应用程序池名称”框中右键单击想要用来作为模板的应用程序池。最后单击[确定]。
指派应用程序池
在 IIS 管理器中,右键单击您要为其指派应用程序池的应用程序,然后单击“属性”。单击“主目录”选项卡,确认您正在指派的目录或虚拟目录的“应用程序名”是否已被填写。如果“应用程序名”框尚未被填写,请单击“创建”,然后输入名称。
在“应用程序池”列表框中,选择您想要为其指派的应用程序池的名称。最后单击[确定]。
一起来看看有关应用程序池的一些问题。应用程序池的“属性”对话框有四页——回收,性能,运行状况,标识,如图六所示。在这些选项页中,最引人注目的恐怕就是“回收”页,使用该选项页可以管理工作进程的回收。在工作进程隔离模式中,IIS可以配置成定期重新启动应用程序池中的工作进程,从而更好地管理那些有错误的工作进程。这确保了池中的应用程序运行正常,并且可以恢复丢失的系统资源。为了回收工作进程,失败工作进程接收请求的能力将被限制,直到它处理完存储在请求队列中的所有剩余请求。为了排出当前请求,可以给予进程配置限制。同一命名空间组的替换工作进程在旧的工作进程停止前启动,从而防止服务中断。旧的进程完成其未决的请求,然后正常关闭,或者如果在达到了配置的时间限制、请求数、设置的时间计划,或当达到指定的内存用量限制后仍没有关闭,则明确地终止进程。默认情况下,应用程序池每隔1740分钟(29小时)回收一次。
W3SVC根据“运行状况”页的选项来判断应用程序池运行是否正常,包括:每隔指定的时间Ping工作进程,时间按秒计,默认值30秒启动时间限制(工作进程必须在指定的时间内开始)关闭时间限制(工作进程必须在指定的时间内关闭)是否启动快速失败保护(如果在指定的时间段内一定数目的工作进程发生失败,则禁用应用程序池)。另外,ISAPI应用程序(包括ASP.NET和asp.dll)可以声明自己不再适合提供服务,要求回收。
默认情况下,当IIS 6.0回收一个池时,它会使用一种称为overlapped recycle的回收技术。在这种回收模式下,失败的工作进程仍会保持运行状态,同时创建一个新的工作进程。IIS 6.0把新传入的请求传递给新的工作进程,但不拆除老的工作进程,直至老的工作进程处理完它队列中的请求,或者遇到超时错误。在此期间,TCP/IP连接不会丢失,因为有http.sys保持着连接的有效性。当失败的工作进程超时出错时,下一个请求传递给工作进程的请求是新的请求,因此原来保存在进程中的会话信息就会丢失。所有这类回收操作都自动进行,无需管理员干预,而且在大多数情况下,不会造成明显的服务中断现象。如有必要,可以将配置数据属性LogEventOnRecycle的值设置为1,指示W3SVC执行回收操作时生成一条事件日志记录。
对于那些不能以多个实例运行的应用程序,overlapped recycle回收技术可能引起问题。如果遇到这类问题,可以将配置数据属性DissallowOverlappingRotation的值设置成True(1),关闭某个应用程序池回收操作时的进程“重叠”现象。另外,对于失败的工作进程,有时我们可能不想将它拆除,仍旧保留该进程,以便检测和寻找发生问题的根源,这时可以将配置数据属性OrphanActionExe设置成执行文件的名字,使得工作进程成为“孤儿”时执行文件仍保持运行状态。
另一个与应用程序池有关的特性是,IIS 6.0允许将应用程序池配置成一个Web园(Web Garden)。要理解Web园的概念,可以设想这样一种情形:假设有一个IIS 5.0服务器和三个Web网站,每一个Web网站运行着相同的应用程序,如果IIS 5.0能够自动按照圆形循环的模式将请求依次发送给这些功能上等价、实际上分离的Web网站,将负载分离到三个不同的进程,就可以构成一个小型的Web农场(Web Farm)——这就是Web园。
在IIS 6.0的Web园中,我们不必创建额外的Web网站,只要指定用于某个应用程序池的工作进程的数量就可以了。具体的配置步骤是:打开应用程序池的“属性”对话框,转到“性能”页,在“Web园”下面的“最大工作进程数”输入框中输入进程数量,如图八。当服务器的负载较小,不需要额外的工作进程时,IIS 6.0在一定的时间后(默认20分钟,可配置)自动缩减实际的工作进程数量如果负载变大,需要额外的工作进程,IIS 6.0再次增加工作进程数量。这一切操作都自动进行,不需要管理员干预。
图6
两个新的配置数据属性——SMPAffinitze和SMPAffinitzeCPUMask——允许配置为工作进程指派的特定处理器:将SMPAffinitized属性设置成true表示应该把分配给应用程序池的特定工作进程指派给特定的CPU,SMPProcessorAffinityMask属性用来配置十六进制的处理器掩码,该十六进制处理器掩码指出应用程序池中的工作进程应该绑定到哪个CPU。
指定标识应用程序池设置
这些回收应用程序池设置是在应用程序池的属性对话框的“标识”选项卡中指定的。
设置标识应用程序池设置
应用程序池“属性”对话框的“标识”选项卡
“用户名”和“密码”分别是等效于username和passwordASP.NET 进程模型设置的应用程序池设置。这两种设置结合使用来使辅助进程使用指定的 Windows 标识运行。默认情况下,辅助进程使用“网络服务”(Network Service) 帐户。但是,如果选择了“可配置”单选按钮并且“用户名”和“密码”文本框包含有效值,则辅助进程将使用指定的 Windows 标识。此外,必须将 Windows 标识添加到IIS_WPG用户组。
将 Windows 标识添加到 IIS_WPG 用户组
这些回收应用程序池设置是在应用程序池的属性对话框的“健全”选项卡中指定的。
设置健全应用程序池设置
应用程序池“属性”对话框的“健全”选项卡
“启用 ping”是等效于pingFrequencyASP.NET 进程模型设置的应用程序池设置。它指定 ASP.NET ISAPI 检查辅助进程是否存在的时间间隔。如果没有辅助进程,则重新启动辅助进程。默认情况下“启用 ping”是启用的而且设置为 30 秒。通过更改数值调节框中的值,可以指定一个不同的时间间隔。若要禁用 ping 操作,请清除“启用 ping”复选框。
“关闭时间限制”是等效于shutDownTimeoutASP.NET 进程模型设置的应用程序池设置。它指定提供给辅助进程的用来正常关闭的时间长度。如果辅助进程在指定的时间长度内没有关闭,则 ASP.NET ISAPI 将结束该辅助进程。默认情况下“关闭时间限制”设置为 90 秒。通过更改数值调节框中的值,可以指定一个不同的时间限制。
通过性能应用程序池设置,可以控制辅助进程的操作。以下几节描述如何指定性能应用程序池设置。
性能应用程序池设置是在应用程序池的属性对话框的“性能”选项卡中指定的。
设置性能应用程序池设置
应用程序池“属性”对话框的“性能”选项卡
“网络园”是等效于webGarden和cpuMaskASP.NET 进程模型设置的应用程序池设置。若要启用“网络园”,请将“辅助进程的最大数目”设置为高于 1 的值。该值还为应用程序池确定最大进程数。
因为网络园支持使用多个进程,所以,每一进程在应用程序状态、进程内会话状态、缓存和静态数据方面都有其自己的副本。网络园不应用于所有应用程序,尤其在这些应用程序需要维护状态的情况下。在决定网络园模式是否适用前,一定要检查应用程序的性能。
在使用网络园时,理解会话状态和循环工作的方式是十分重要的。考虑其他应用程序池设置影响应用程序的方式也是十分重要的。
在使用会话状态时,请注意,辅助进程隔离模式不支持将请求传送回引起请求返回的进程。当一个应用程序运行在处于 ASP 会话状态或应用程序状态的网络园中时,该应用程序需要将其请求发送回发起的进程。在使用 IIS 6.0 应用程序池时,要确保应用程序让一个连接总保持为打开状态,以便其请求被发送回适当的进程。如果此连接没有保持为打开状态,则请求将被发送到为网络园提供服务的下一可用的辅助进程。
循环是一种用于应用程序的负载平衡方法。在每个请求到达时,它会自动被发送到下一可用进程。例如,如果网络园具有 4 个进程,则请求被发送到进程 0、1、2 和 3,并依照这一顺序发送。然后为其他请求重复该循环。
某些应用程序池设置具有特定于网络园的行为。下表总结了这些行为。
应用程序池设置 | 行为 |
---|---|
AppPoolQueueLength | 此参数的值不受影响。但是,请求是通过在所有为网络园提供服务的辅助进程上循环而分发的。 |
DisallowOverlappingRotation | 网络园中没有行为更改。 |
DisallowRotationOnConfigChange | 网络园中没有行为更改。 |
IdleTimeout | 为每一进程独立计算,这样各进程的超时可以彼此独立。根据所选择的路由算法,将自动配置要加载的进程的数目。 |
LoadBalancerCapabilities | 网络园中没有行为更改。 |
OrphanAction | 网络园中没有行为更改。 |
OrphanWorkerProcess | 网络园中没有行为更改。 |
PeriodicRestartTime |
此参数的含义在网络园中发生了变化。在网络园中,此参数指定回收所有进程的时间间隔。进程在指定时间长度内以平均的时间间隔轮流回收。例如,如果网络园具有四个进程并且PeriodicRestartTime被设置为 20 小时,则在 5 小时后回收第一个进程,在 10 小时后回收第二个进程,依此类推。
注意 如果进程崩溃,则向替代进程提供PeriodicRestartTime的运行时值。这使得崩溃的进程可以在指定的PeriodicRestartTime内与其他进程一起回收。 |
PeriodicRestartRequests | 此参数的含义在网络园中发生了变化。在网络园中,此参数指定在达到某一请求数目后回收所有进程。进程在指定的请求数目内按平均时间间隔轮流回收。例如,如果网络园具有四个进程并且PeriodicRestartRequests设置为 40,000 个请求,则第在 10,000 个请求后回收一个进程,在 20,000 个请求后回收第二个进程,依此类推。在回收了第一组进程后,将向下一组进程指派 40,000 这一PeriodicRestartRequests值。 |
PeriodicRestartSchedule | 网络园中没有行为更改。如果管理员决定使用基于时间表的回收,则同时回收所有网络园进程。 |
PingInterval | 网络园中没有行为更改。 |
PingResponseTime | 网络园中没有行为更改。 |
PingingEnabled | 网络园中没有行为更改。 |
RapidFailProtection | 网络园中没有行为更改。例如,在一段时间间隔内计算整个网络园的失败总数然后进行比较。这提供了额外的恢复能力。 |
RapidFailProtectionInterval | 网络园中没有行为更改。例如,在一段时间间隔内计算整个网络园的失败总数然后进行比较。这提供了额外的恢复能力。 |
RapidFailProtectionMaxCrashes | 网络园中没有行为更改。例如,在一段时间间隔内计算整个网络园的失败总数然后进行比较。这提供了额外的恢复能力。 |
SMPAffinitized | 网络园中没有行为更改。 |
SMPProcessorAffinityMask | 在 IIS 5.0 隔离模式中,您只能具有与 CPU 的数目一样多的辅助进程。在辅助进程隔离模式中,多个 CPU 可用于单个辅助进程。 |
ShutdownTimeLimit | 网络园中没有行为更改。 |
StartupTimeLimit | 网络园中没有行为更改。 |
“空闲超时”是等效于idleTimeoutASP.NET 进程模型设置的应用程序池设置。它指定辅助进程或应用程序池在开始处于不活动状态后,过多长时间将其关闭。默认情况“空闲超时”是启用的而且设置为 20 分钟。通过更改数值调节框中的值,可以指定一个不同的时间限制。若要禁用“空闲超时”,请清除该复选框。
“请求队列限制”是等效于restartQueueLimitASP.NET 进程模型设置的应用程序池设置。它指定在异常终止后等待辅助进程启动时在 ASP.NET ISAPI 中排队的请求的最大数目。默认情况下“请求队列限制”是启用的而且设置为 1000 个请求。通过更改数值调节框中的值,可以对排队的请求的数目指定不同的限制。若要禁用“请求队列限制”,请清除该复选框。
通过回收应用程序池设置,可以控制如何恢复系统资源。以下几节介绍如何指定回收应用程序池设置。
回收应用程序池设置是在应用程序池的属性对话框的“回收”选项卡中指定的。
设置回收应用程序池设置
应用程序池“属性”对话框的“回收”选项卡
“内存回收”是等效于memoryLimitASP.NET 进程模型设置的应用程序池设置。它指定辅助进程可以使用的最大内存量。如果辅助进程超出了这一数量,将创建新的进程来替换它,并且当前所有请求都被重新分配给该新进程。在memoryLimitASP.NET 进程模型设置与“内存回收”应用程序池设置之间有两个重要的区别:
“回收辅助进程”是等效于requestLimitASP.NET 进程模型设置的应用程序池设置。它指定导致辅助进程或应用程序池被回收的请求的数目。默认情况下“回收辅助进程”是禁用的。若要启用“回收辅助进程”,请选取该复选框并在数值调节框中指定请求数。
“回收多个辅助进程”是等效于timeoutASP.NET 进程模型设置的应用程序池设置。它指定回收辅助进程或应用程序池的时间间隔。默认情况下“回收多个辅助进程”是启用的而且设置为 120 分钟。通过更改数值调节框中的值,可以指定一个不同的时间间隔。若要禁用“回收多个辅助进程”,请清除该复选框。