日期:2014-05-16  浏览次数:20913 次

Apache 工作模式

apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式

??? ?prefork模式:
? ??这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。
这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
???worker模式:
?? ?此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
控制这个MPM的最重要的指令是,控制每个子进程允许建立的线程数ThreadsPerChild指令,和控制允许建立的总线程数的MaxClients指令。
??apache模式的查看和安装:
? ? ?如果apache已经安装,我们可以用 httpd -l ?命令查看当前模式(只可能有一种)
? ?如果找到 prefork.c 则表示当前工作在prefork模式,同理出现worker.c则工作在worker模式。
? ? 如果apache还未安装,我们在编译的时候可以加入 --with-pem=(prefork|worker)选项决定启用什么模式。
? ? ?当然如果你安装过了(笔者模式为prefork) 也可以使用以下命令来切换
mv httpd httpd.prefork?
mv httpd.worker httpd
? ?重启之后,模式就会改变。
??不同模式配置:
??针对不通的模式配置文件也是不一样的,他们都是在httpd的默认配置文件httpd.conf中
<IfModule prefork.c>?
StartServers???????????? 5?
MinSpareServers????????5?
MaxSpareServers???? 20?
ServerLimit????????????256?
MaxClients???????????? 256?
MaxRequestsPerChild????4000?
</IfModule>?
#这是prefork的配置文件?
<IfModule worker.c>?
StartServers???????????????? 2?
MaxClients???????????????? 150?
MinSpareThreads???????? 25?
MaxSpareThreads???????? 75?
ThreadsPerChild???????? 25?
MaxRequestsPerChild????0?
</IfModule>?
#这是worker的配置文件

?
?prefork.c模块
prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:他能够使用那些没有处理好线程安全的第三方模块,并 且对于那些线程调试困难的平台而言,他也更容易调试一些。
ServerLimit 20000
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 1000
MaxRequestsPerChild 0
? //默认的MaxClient最大是256个线程,假如想配置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。假如需要更大,则必须编译apache,此前都是无需重新编译Apache。
生效前提:必须放在其他指令的前面