码迷,mamicode.com
首页 > Web开发 > 详细

apache 工作模式

时间:2015-07-08 20:42:39      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

apache两种工作模式:(主流) prefork/worker

prefork模式:默认这个模式(常用的多)
效率比较高,但要比 worker使用内存更大
这个多路处理模块(MPM)实现了一个非线程型的,预派生的web服务器,工作类似于 apache1.3。它适用于没有线程安全库,
需要避免线程兼容性问题的系统.它要求将每个请求互相独立的情况下最好的MPM,这样一个请求出现问题就不会影响到其他请求。
这个MPM具有很强的自我调节能力,只需要很少的配置指定调整。最重要的是将 MaxClients设置为一个足够大的数值以处理
潜在的请求高峰,同时,又不能太大,以致需要使用的内存超过物理内存的大小

查看是哪一个模式,可通过
httpd -l
如果有 prefork.c,则表示为 prefork模式,同理,如果有 worker.c,则为worker模式

配置文件:httpd.conf中
<IfModule prefork.c>
#
#
#
</IfModule>
MaxClients 256 #默认的最大线程数,如果想更大值,就加上 ServerLimit 20000, 这个必须放在其他指令前才生效,
如果还更大,就得重新编译 apache,限定同一时间客户端最大接入请求的数量(单个进程并数)。任何超过
MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务

StartServers 5 #指定服务器在启动时建立的子进程数量,默认为 5

MinSpareServers 5 #指定空闲子进程的最小数量,默认为5,假如当前空闲子进程数少于 MinSpareServers,那么
apache将以最大每秒一个速度产生新的子进程。此参数不宜过大

MaxSpareServers 20 # 配置空闲子进程的最大数量,默认为20,假如当前有超过 MaxSpareServers数量的空闲子进程,
那么父进程将杀死多余的子进程。此参数不宜过大,


MaxRequestsPerChild 4000 #每个子进程在其生存期内允许伺服的最大请求数量,到达 MaxRequestsPerChild的限制后,
子进程将会结束。假如设置为0,子进程将永远不会结束。
设置为大于0有好处:
1.能防止内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

worker模式(支持混合的多线程多进程的多路处理模块)
使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,
一个高流量的HTTP服务器上,worker MPM是个比较好的选择,因为worker MPM的内存使用比Prefork MPM要低得多。
但是worker MPM也有缺点,如,一个线程崩溃了,整个进程就会连同其任何线程一起“挂了”,
由于线程是共享内存空间,所以一个程式在运行时必须被系统识别为“每个线程是安全的”

配置文件:httpd.conf中
<IfModule prefork.c>
#
#
#
</IfModule>
ServerLimit 16 #服务器允许配置的进程上限,这个指令和 ThreadLimit 50结合使用。

ThreadLimit 64 #每个子进程可配置的线程数上限,这个指令配置了每个子进程可配置的线程数

StartServers 3 #服务器启动时建立的子进程数。

ThreadsPerChild 25 #每个子进程建立常驻的线程数。

 

一般配置方式:
ThreadLimit >= ThreadsPerChild
MaxClients = MinSpareThreads+ThreadsPerChild
硬限制:
ServerLimi和ThreadLimit这两个指令决定了活动子进程数量和每个子进程中线程数量的硬限制。
要想改变这个硬限制必须完全停止服务器然后再启动服务器(直接重启是不行的)。

Apache在编译ServerLimit时内部有一个硬性的限制,您不能超越这个限制。
prefork MPM最大为"ServerLimit 200000"
其他MPM(包括work MPM)最大为"ServerLimit 20000

Apache在编译ThreadLimit时内部有一个硬性的限制,您不能超越这个限制。
mpm_winnt是"ThreadLimit 15000"
其他MPM(包括work prefork)为"ThreadLimit 20000

注意
使用ServerLimit和ThreadLimit时要特别当心。
假如将ServerLimit和ThreadLimit配置成一个高出实际需要许多的值,
将会有过多的共享内存被分配。当配置成超过系统的处理能力,Apache可能无法启动,或系统将变得不稳定。

apache 工作模式

标签:

原文地址:http://www.cnblogs.com/lin3615/p/4631030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!