安装哪一个:Apache Worker 还是 Prefork?它们各自的优缺点是什么?

安装哪一个:Apache Worker 还是 Prefork?它们各自的优缺点是什么?

根据对预分叉工人MPM,似乎 prefork 类型有些过时,但我确实找不到两种类型的适当比较。

我想知道的是:

  • 这两个版本之间有什么区别?
  • 每种服务器类型的优点和缺点是什么?
  • 是否有任何基本准则可根据条件选择哪种类型?
  • 两者的性能之间有很大差异吗?

答案1

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

答案2

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

在提供静态和动态内容混合时,这将使您能够以适量的内存(4〜8GB)从几百个扩展到超过 1000 个并发连接。

当然,您还应该将前端缓存解决方案作为整体部署的一部分进行调查(memcached、varnish)。

或者,升级到 apache 2.4 及其原生事件MPM,它以改进的方式处理并发性(线程在连接时触发,而不是等待轮询。)

答案3

这个问题发布已经大约 3 年了,但我建议您即使使用 PHP 也使用 worker MPM 而不是 pre-fork,以获得更好的性能。

至于区别,pre-fork 是非线程的,因此服务器会为每个客户端请求分叉一个进程(它会在预期新请求时进行预分叉,这样分叉就不会占用响应时间)。由于请求在单独的进程中处理,因此这通常会占用比以前更多的内存和 CPU。worker 带来多线程,它更轻量,内存利用率更高。

答案4

这需要根据您将拥有的流量类型和种类来确定。此外,您首先需要了解 prefork 和 worker 之间的主要区别。希望下面的文章能帮助您弄清楚! http://slashroot.in/nginx 与 apache 有何不同

相关内容