要点 只有在工作进程隔离模式下运行时才能使用该 IIS 6.0 功能。
在工作进程隔离模式中,可以配置应用程序池以监视其工作进程的运行状况,还可以监视整个应用程序池的运行状况。监视工作进程的运行状况包括检测工作进程不能为请求提供服务并进行适当的操作。例如,如果工作进程没有响应万维网发布服务(WWW 服务)发出的 Ping 请求,那么工作进程可能没有可用线程处理传入的请求。发生这种情况时,WWW 服务会终止该工作进程,或者释放工作进程并使其保持运行状态,然后启动一个新的工作进程替代它。管理员可以预先配置释放未正常运行的工作进程时所进行的操作,例如将工作进行附加到调试程序。
除了监视工作进程的运行状况,WWW 服务还可以检测整个应用程序池中当前的问题。例如,如果工作进行每几秒钟就异常终止一次,则 WWW 服务可以确定工作进程运行不正常并将其停止,从而防止运行不正常的应用程序影响其他应用程序池中的应用程序。
下列情况将导致应用程序池启动或停止:
工作进程 ping 使 WWW 服务能够检测到工作进程无法响应请求(即工作进程不能正常运行)。Ping 是在 WWW 服务与工作进程之间发送的消息。如果 Ping 成功,则 WWW 服务假设应用程序池运行正常。如果 Ping 失败(未收到工作进程的响应),WWW 服务则假设工作进程存在问题。如果存在问题,则 WWW 服务会终止工作进程或将其释放,然后在需要为新请求提供服务时启动新的工作进程。如果工作进程被释放后仍然处于运行状态,则 WWW 服务会运行由管理员配置的操作。
WWW 服务 Ping 功能的设置和 Ping 的频率由配置数据库属性
可以生成 ISAPI 扩展应用程序以编程方式通知 IIS 它需要进行回收。此操作可以通过新的服务器支持函数 HSE_REQ_REPORT_UNHEALTHY 来完成。请参阅 MSDN Online 上 ISAPI 扩展参考中的 ServerSupportFunction。
要有效地使用此函数,运行应用程序的 IIS 服务器必须启用了工作进程 Ping(请参阅配置工作进程运行状况监视),因为正是在 Ping 操作期间,WWW 服务能够检测到 ISAPI 未正常运行以及工作进程应该回收。ISAPI 需要能够确定其未正常运行状况的内部机制,例如监视内部线程池的状态。您应该考虑到此类的编程会关闭 ISAPI 扩展在其间运行的工作进程。因此,在该工作进程中运行的所有应用程序都需要重新启动。
由于 ASP ISAPI 扩展能够监视其内部线程池的状态,因此可以实现使用此功能的逻辑。如果进入锁定状态的线程过多,它将会发出回收的信号。
运行状况检测不能用于未导致工作进程损坏的应用程序失败,也不能阻止工作进程中的可用线程。例如,返回无效响应代码(如 HTTP 500)但能够正常运行的应用程序仍然可以对 WWW 服务的 Ping 做出响应,除非应用程序是实现了特定代码指示其未正常运行状态的自定义 ISAPI 扩展。
如果确定某个工作进程无法正常运行,您可能会希望在启动新的工作进程为请求提供服务之前,WWW 服务保持原工作进程处于运行状态以便进行调试,而不是终止该进程。通过启用应用程序池中的调试功能,可以通知 WWW 服务不要终止工作进程,而使其从为应用程序池服务中释放出来,并保持运行状态。
除了以释放状态运行运行不正常的工作进程,还可以将 WWW 服务配置为启动可执行应用程序或脚本(例如,向管理员发送电子邮件以便通知他们失败消息可以配置为启用调试功能的应用程序)。被认为是运行不正常的工作进程的“进程 id”是发送给可执行程序或脚本的第一个参数。
注意 已被释放并保持运行状态的工作进程可能仍然会终止。WWW 服务会使其处于运行状态。如果工作进程从不正常运行状态中恢复,则会检测到自己与 WWW 服务无关系,并自终止。因此,可能找到声明工作进程被释放的日志项,但是无法找到工作进程运行的证据。
由于工作进程不会由 IIS 从内存中删除,因此如果启用运行要被释放的未正常运行的工作进程,请考虑到可能需要处理被阻止的工作进程。如果管理员未正确处理用于调试的工作进程,那么您的计算机上会运行大量运行不正常的工作进程。并且这些工作进程可能会占用其他进程所需的资源。为了释放这些资源,可能需要快速终止这些工作进程。
如果在指定时间段内发现指派给应用程序池的太多工作进程运行不正常,快速失败保护将停止该应用程序池。
应用程序池停止后,HTTP.sys 将返回停止服务消息(503:服务不可用),或者基于应用程序池
注意 如果一台计算机上主控了多个应用程序,则应该小心配置负载平衡器,或者将硬件切换为仅重新路由对于失败的应用程序池的通信。不要将请求路由出能够正常运行的应用程序池,因为它们仍然可以接收和处理请求。
由于请求不进入用户模式的处理,因此快速失败保护可以减少处理出现问题的应用程序的开销。因此,其他应用程序池受到保护,防止它们受到运行不正常的应用程序池的影响。
可以使用以下两种方式设置快速失败保护:
监视应用程序池运行状况并进行修正操作至少需要完成下列步骤: