根据对Prefork和Worker MPM的描述,似乎preforktypes已经有些过时了,但我无法真正find这两种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