编译参数:
--with-mpm=MPM Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2|perchild|leader|threadpool|win_nt}
linux和unix下面默认为profork模式,常用的有worker模式和profork模式,windows下面是win_nt模式。
1:profork
工作原理:一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的(spare)或者是空 闲的子进程用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。将MaxClients设置为一个足够大的数值以处理潜在的请求高 峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
优点:具有很强的自我调节能力,只需要很少的配置指令调整。
默认值 | 说明 | |
MaxSpareServers | 10 | 设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有非常繁忙的机器才用设置这个值,不要设置的太大。 |
MinSpareServers | 5 | 空闲子进程的最小数量 |
StartServers | 5 | 设置了服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数 |
ServerLimit | 最大200000,编译默认20000 | 只有在你需要将MaxClients设置成高于默认值256的时候才需要使用这个指令。要将此指令的值保持和MaxClients一样。 |
MaxClients | 256 | MaxClients指令设置了允许同时伺服的最大接入请求数量。任何超过MaxClients限制的请求都将进入等候队列,直到达到ListenBacklog指令限制的最大值为止。一旦一个链接被释放,队列中的请求将得到服务。对于非线程型的MPM(也就是prefork),MaxClients表示可以用于伺服客户端请求的最大子进程数量,默认值是256。要增大这个值,你必须同时增大ServerLimit 。 |
MaxRequestsPerChild | 10000 | 设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。 |
2:worker
工作原理:每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可 以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。
优点:由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM,是apache2.0后的发展趋势。
典型设置:
ServerLimit 16
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
默认值 | 说明 | |
MaxSpareThreads | 250 | 最大空闲线程数 |
MinSpareThreads | 75 | 最小空闲线程数 |
StartServers | 3 | 设置了服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数 |
ServerLimit | 最大200000,编译默认20000 | 只有需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时候才需要使用这个指令。不要将该指令的值设置的比MaxClients 和ThreadsPerChild需要的子进程数量高。 |
MaxClients | 50 | 表示可以用于伺服客户端请求的最大线程数量。对于混合型的MPM默认值是16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要将MaxClients增加到超过16个进程才能提供的时候,你必须同时增加ServerLimit的值。 |
ThreadsPerChild | 25 | 这个指令设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。如果使用一个类似于mpm_winnt只有一个子进程的MPM,这个数值要足够大,以便可以处理可能的请求高峰。如果使用一个类似于worker有多个子进程的MPM,每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。 |
3:event
event多路处理模块(MPM)被设计成面向需要处理大量并发连接的场合(特别是在开启KeepAlive的场合),它基于worker开发,并且配置 指令与worker完全相同。
要使用event MPM,你必须在配置脚本configure的命令行上使用--with-mpm=event选项。
该MPM依赖于APR用于线程同步的compare-and-swap原子操作,并且你还需要在configure命令行上使用--enable- nonportable-atomics=yes选项。如果你为x86平台编译,那么最低要求i486以上的CPU支持;如果你为SPARC平台编译,那 么最低要求UltraSPARC芯片。因为更老的CPU不支持compare-and-swap原子操作。