如何使用apache的 work模式还是 prefork 模式

回复 收藏
注意: 2.4之前版本默认为prefork, 2.4已经变为event模式。

三种模式比较: http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html

在编译apache的时候,有一个参数叫做  
--with-mpm=...    等号后边用于指定那种模式,可选的有 beos|event|worker|prefork|mpmt_os2   其中,咱们都知道 prefork 以及 worker 其他模式就不晓得了,感兴趣不妨你去google一下。

当你编译时,不指定哪种模式,就是说,不加该参数,那么默认apache会以prefork模式来为我们提供服务。不信,你编译试试看
./configure --prefix=/usr/local/apache2  
验证的话,就是用  apachectl -l  看看是否有
prefork.c

而,如果你想要worker模式,那么请指定吧   ./configure --prefix=/usr/local/apache2   --with-mpm=worker
apachectl -l 看,有
worker.c 而没有 prefork.c
2011-12-23 17:40 举报
已邀请:
0

ilyqui

赞同来自:

在Apache/2.4.6版本中,MPM默认值已经变为event ,而在以前的旧版本中,MPM默认值为prefork 。

---------------------------------------------------

  Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

  这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。



  Worker MPM : 此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

  每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。



  不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。



  Event MPM:以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。
0

楓瀛夢鞢

赞同来自:

学习了
0

657402624

赞同来自:

有些理解
0

lyhabc

赞同来自:

复杂  
0

qin521ne

赞同来自:

复习
0

qqq998492

赞同来自:

虽说不太懂  还是 谢谢分享
0

summer123

赞同来自:

根本不懂啊
0

言尽

赞同来自:

Event模式不能在https下用,还是蛮尴尬的吧
0

先生好

赞同来自:

这个很实用,面试的时候可以可以尽量往多说,学习了  
0

wanmei

赞同来自:

学习

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: