深入剖析IIS 6.0(8)_Windows教程
前面我们了解了IIS 6.0体系结构的关键组件,下面来看看有关应用程序池的一些问题。应用程序池的“属性”对话框有四页——回收,性能,运行状况,标识,如图六所示。在这些选项页中,最引人注目的恐怕就是“回收”页,使用该选项页可以管理工作进程的回收。在工作进程隔离模式中,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再次增加工作进程数量。这一切操作都自动进行,不需要管理员干预。
图八
两个新的配置数据属性——SMPAffinitze和SMPAffinitzeCPUMask——允许配置为工作进程指派的特定处理器:将SMPAffinitized属性设置成true表示应该把分配给应用程序池的特定工作进程指派给特定的CPU,SMPProcessorAffinityMask属性用来配置十六进制的处理器掩码,该十六进制处理器掩码指出应用程序池中的工作进程应该绑定到哪个CPU。
写到这里,文章的篇幅似乎已经太长了。本文主要从体系结构的角度介绍IIS 6.0的新特性,并且尽力做到全面,至少要比通常见到的介绍更完善一些。文章的第二部分将涵盖更多的IIS 6.0新特性,你会发现许多新特性正是自己长久以来盼望的。
- 相关链接:
- 教程说明:
Windows教程-深入剖析IIS 6.0(8)。