要安装哪个:Apache Worker或Prefork? 每个(dis-)的优点是什么?

根据对Prefork和Worker MPM的描述,似乎preforktypes已经有些过时了,但我无法真正find这两种types的适当比较。

我想知道的是:

  • 两个版本有什么区别?
  • 每种服务器types的(dis-)优势是什么?
  • 是否有基于条件select哪种types的基本指导原则?
  • 两者之间有什么大的性能差异?

正如文档所述,如果您需要避免使用与非线程安全库兼容的线程,则应该使用prefork MPM。 通常情况下,任何非平凡的Apache模块( mod_php ,或者更准确地说,它链接到的无数的扩展和库,作为规范的例子)具有某种非线程安全的库(或者具有非线程 – 安全的代码在里面),所以除非你使用一个很好的股票Apache安装,我会去prefork MPM。

在服务大量(> 100个)并发连接时运行不安全扩展的经典解决scheme是在fastCGI(mod_fcgid,本地apache模块)上运行PHP,并从运行Worker MPM的apache实例向代理请求dynamic请求。

这将使您能够在混合使用静态和dynamic内容时,使用适中的内存量(4〜8GB)从几百个并发连接扩展到> 1000个并发连接。

当然,您还应该调查前端caching解决scheme作为整体部署(memcached,varnish)的一部分。

或者,升级到apache 2.4及其本机事件 MPM,它以极大改进的方式处理并发(线程在连接时被触发,不等待被轮询)。

这个问题已经过了大约3年,但是我build议你使用MPM,而不是使用PHP前叉,以获得更好的性能。

至于差异,pre-fork是非线程的,因此服务器为每个客户端请求分配一个进程(它预先考虑到新请求,以便分叉不会进入响应时间)。 由于请求是服务器在一个单独的过程中,这通常会加重你的内存和CPU。 工作人员带来了更轻,内存利用率更高的multithreading。

这是你所服务的东西非常特别的东西。 如果你正在做很多小静态连接,线程会更轻,更快。 如果你只有几个大的应用程序不断涌现,prefork可能会有一个优势,因为它是成熟和稳定的。 为什么不设置你所需要的,testing一个,换出MPM模块,再试一次,看看哪一个更适合你?

这需要你所拥有的交通types和种类。 首先,你需要了解prefork和worker之间的主要区别。 希望下面的文章将帮助你弄清楚! http://slashroot.in/how-is-nginx-different-from-apache