Apache HTTP服务器 2.0版本
说明: | 使网络服务器支持多线程多进程的多道处理模块 |
---|---|
状态: | MPM |
模块名: | mpm_worker_module |
源文件: | worker.c |
此多道处理模块(MPM)使网络服务器支持多线程多进程。 由于使用线程来处理请求,所以,可以处理巨量请求,而系统资源的开销小于基于进程的服务器。 但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的服务器的稳定性。
控制这个MPM的最重要的指令是,控制每个子进程允许建立的线程数的ThreadsPerChild
指令,和控制允许建立的线程总数的MaxClients
。
每个进程可以拥有的线程数量是固定的。 服务器会根据负载情况做增加或减少进程数量的调整。
单个控制进程负责子进程的建立。每个子进程可以建立由ThreadsPerChild
指定的固定数量的线程。
然后,由独立的线程监听并处理到来的连接。
Apache总是试图维持一个备用的或者说空闲的服务线程池。
如此,客户端无须等待新的线程或新的进程的建立即可得到处理。
最初建立进程的数量由StartServers
指令所决定。
其后,Apache检测所有进程中空闲线程的总数,并新建或结束进程使总数维持在MinSpareThreads
和MaxSpareThreads
所指定的范围以内。
由于这个过程是自动调整的,几乎没有必要修改这些指令的缺省值。
同时可以得到处理的客户端的最大数量取决于MaxClients
指令,而进程建立的最大数量取决于ServerLimit
指令。ServerLimit
乘以ThreadsPerChild
必须大于等于MaxClients
。
worker
MPM 中进程-线程控制的典型配置如下:
StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 ServerLimit 16
在Unix中,为了能够绑定端口80,父进程一般都是以root身份启动的,
其后,Apache以较低权限的用户建立子进程和线程。User
和Group
指令用于设置Apache子进程的权限。
虽然子进程必须对其提供的内容拥有读权限,但应该尽可能给予它较少的特权。
另外,除非使用了suexec,
否则,这些指令设置的权限将被CGI脚本所继承。
MaxRequestsPerChild
指令用于控制服务器建立和结束进程的频率。