Apache MPM Winnt

Description:为 Windows NT 优化的 multiprocessing 模块。
Status:MPM
Module Identifier:mpm_winnt_module
Source File:mpm_winnt.c

Summary

该 multiprocessing 模块(MPM)是 Windows NT os 的默认设置。它使用单个控制进程来启动单个子进程,该子进程进而创建线程来处理请求

使用ThreadsPerChild指令配置容量,该指令设置并发 Client 端连接的最大数量。

默认情况下,该 MPM 使用高级 Windows API 来接受新的 Client 端连接。在某些配置中,第三方产品可能会干扰此实现,并在 Web 服务器日志中写入以下消息:

Child: Encountered too many AcceptEx faults accepting client connections. winnt_mpm: falling back to 'AcceptFilter none'.

MPM 可以使用更安全的实现,但是某些 Client 端请求未得到正确处理。为了避免此错误,请将AcceptFilter与接受过滤器none一起使用。

AcceptFilter http none
AcceptFilter https none

在 Apache httpd 2.0 和 2.2 中,Win32DisableAcceptEx用于此目的.

WinNT MPM 在某些方面与 Unix MPM(例如 worker 和 event)有所不同:

  • 当子进程由于关闭,重新启动或MaxConnectionsPerChild而退出时,退出进程中的活动请求需要TimeOut秒才能完成,然后中止处理。未实现其他类型的重新启动和关闭。

  • 新的子进程读取配置文件,而不是从父进程继承配置。如果子进程是在启动或重新启动时创建的,则该行为与 Unix 上的行为相同,但是如果由于前一个崩溃或到达MaxConnectionsPerChild而创建了子进程,则对该子进程的配置的任何未决更改都将在该子进程中变为活动状态。点,父级和子级将使用不同的配置。如果部分实施了计划的配置更改,并且无法解析当前配置,则替换子进程将无法启动,并且服务器将停止。因此,在服务器重新启动之前,不应更改配置文件。

  • 当前未实现monitorfatal_exception钩子。

  • AcceptFilter在 MPM 中实现,对新连接的处理具有不同类型的控制。 (有关详细信息,请参阅AcceptFilter文档。)