it-swarm.cn

要安装哪个:Apache Worker或Prefork?有哪些(每个缺点?

根据对 PreforkWorker MPM的描述,似乎prefork类型有些过时了,但是我无法真正找到这两种类型的正确比较。

我想知道的事情:

  • 两个版本之间有什么区别?
  • 每种服务器类型的(缺点)有哪些优点?
  • 是否有根据条件选择哪种类型的基本准则?
  • 两者之间在性能上有很大差异吗?
55
Aron Rotteveel

如文档所述,如果您需要避免使用线程以与非线程安全库兼容,则应使用prefork MPM。通常,任何非平凡的Apache模块(mod_php-或更准确地说,它链接到的无数扩展和库-作为典范示例,都具有某种非线程安全的库(或其中包含非线程安全的代码),因此除非您使用大量的Apache安装,否则我会选择prefork MPM。

40
womble

在服务大量(> 100个)并发连接时运行不安全扩展的经典解决方案是在fastCGI(mod_fcgid,本机Apache模块)上运行PHP),并将动态请求代理给Apache运行Worker MPM的实例。

当混合使用静态和动态内容时,这可以使您从数百个并发连接扩展到具有适度内存(4〜8GB)的> 1000。

当然,您还应该在整体部署(内存缓存,清漆)中研究前端缓存解决方案。

或者,升级到Apache 2.4及其本机event MPM,它以一种大大改进的方式处理并发性(连接时会触发线程,而不是等待轮询)。

13
adaptr

自问题发布以来已经有3年了,但是我建议您使用工人MPM而不是使用前叉,即使使用PHP,也可以获得更好的性能。

关于差异,预分叉是非线程的,因此服务器为每个客户端请求分叉一个进程(它在预料到新请求时会进行预分叉,以免分叉不会占用响应时间)。由于请求是在单独的进程中进行服务器处理,因此这通常会使您的内存和CPU负担更多。 Worker带来了更轻的多线程并具有更好的内存利用率。

6
aleemb

这对于您所服务的内容来说非常特殊。如果您要进行很多小的静态连接,则线程会更轻,更快。如果您只有很少的大型应用程序不断出现,则由于其成熟性和稳定性,Prefork可能具有Edge。为什么不只是设置所需的东西,测试一个,换出MPM模块,再试一次,看看哪个更适合您呢?

2
Marcin

需要您拥有的流量类型和种类。首先,您还需要了解前叉和工人之间的主要区别。希望下面的文章能帮助您找到答案! http://slashroot.in/how-is-nginx-different-from-Apache

1
sarath