Aron Rotteveel Asked: 2009-07-25 00:47:30 +0800 CST2009-07-25 00:47:30 +0800 CST 2009-07-25 00:47:30 +0800 CST 安装哪个:Apache Worker 还是 Prefork?每个的(缺点)优点是什么? 772 根据对Prefork和Worker MPM 的描述,似乎 prefork 类型有些过时,但我真的找不到这两种类型的适当比较。 我想知道的: 两个版本有什么区别? 每种服务器类型的(缺点)优点是什么? 是否有根据条件选择哪种类型的基本准则? 两者之间有什么大的性能差异吗? apache-2.2 mpm-worker mpm-prefork 5 个回答 Voted Best Answer womble 2009-07-25T01:04:02+08:002009-07-25T01:04:02+08:00 正如文档所说,如果您需要避免线程化以与非线程安全库兼容,则应该使用 prefork MPM。通常,任何重要的 Apache 模块(mod_php或者更准确地说,它链接到的无数扩展和库——作为典型示例)都有某种非线程安全的库(或具有非线程安全的库)。里面的安全代码),所以除非你使用的是漂亮的 Apache 安装,否则我会选择 prefork MPM。 adaptr 2012-04-03T05:21:23+08:002012-04-03T05:21:23+08:00 在为大量(>100)并发连接提供服务的同时运行不安全扩展的经典解决方案是在 fastCGI(mod_fcgid,本机 apache 模块)上运行 PHP,并将动态请求代理到来自运行 Worker MPM 的 apache 实例的请求。 当提供静态和动态内容的混合时,这将使您能够使用适度的内存(4~8GB)从几百个扩展到> 1000个并发连接。 当然,您还应该研究前端缓存解决方案作为整体部署的一部分(memcached、varnish)。 或者,升级到 apache 2.4 及其原生事件MPM,它以一种大大改进的方式处理并发(线程在连接时被触发,而不是等待轮询。) aleemb 2012-10-22T09:02:04+08:002012-10-22T09:02:04+08:00 自问题发布以来已经过去了大约 3 年,但即使使用 PHP,我也建议您使用 worker MPM 而不是 pre-fork,以获得更好的性能。 至于差异,预分叉是非线程的,因此服务器为每个客户端请求分叉一个进程(它预分叉以预期新请求,因此分叉不会占用响应时间)。由于请求是在一个单独的进程中的服务器,这通常会比你的内存和 CPU 消耗更多。worker 带来的多线程更轻,内存利用率更高。 Marcin 2009-07-25T05:33:41+08:002009-07-25T05:33:41+08:00 这是您所服务的非常特别的东西。如果你正在做很多小的静态连接,线程会更轻更快。如果您只是不断产生几个大型应用程序,那么 prefork 可能由于它的成熟和稳定性而具有优势。为什么不直接设置你需要的东西,测试一个,换掉 MPM 模块,再试一次,看看哪个更适合你? sarath 2012-11-17T07:30:15+08:002012-11-17T07:30:15+08:00 这需要您将拥有的流量类型和种类。而且首先您需要了解 prefork 和 worker 之间的主要区别。希望下面的文章能帮助你弄清楚! http://slashroot.in/how-is-nginx-different-from-apache
正如文档所说,如果您需要避免线程化以与非线程安全库兼容,则应该使用 prefork MPM。通常,任何重要的 Apache 模块(
mod_php
或者更准确地说,它链接到的无数扩展和库——作为典型示例)都有某种非线程安全的库(或具有非线程安全的库)。里面的安全代码),所以除非你使用的是漂亮的 Apache 安装,否则我会选择 prefork MPM。在为大量(>100)并发连接提供服务的同时运行不安全扩展的经典解决方案是在 fastCGI(mod_fcgid,本机 apache 模块)上运行 PHP,并将动态请求代理到来自运行 Worker MPM 的 apache 实例的请求。
当提供静态和动态内容的混合时,这将使您能够使用适度的内存(4~8GB)从几百个扩展到> 1000个并发连接。
当然,您还应该研究前端缓存解决方案作为整体部署的一部分(memcached、varnish)。
或者,升级到 apache 2.4 及其原生事件MPM,它以一种大大改进的方式处理并发(线程在连接时被触发,而不是等待轮询。)
自问题发布以来已经过去了大约 3 年,但即使使用 PHP,我也建议您使用 worker MPM 而不是 pre-fork,以获得更好的性能。
至于差异,预分叉是非线程的,因此服务器为每个客户端请求分叉一个进程(它预分叉以预期新请求,因此分叉不会占用响应时间)。由于请求是在一个单独的进程中的服务器,这通常会比你的内存和 CPU 消耗更多。worker 带来的多线程更轻,内存利用率更高。
这是您所服务的非常特别的东西。如果你正在做很多小的静态连接,线程会更轻更快。如果您只是不断产生几个大型应用程序,那么 prefork 可能由于它的成熟和稳定性而具有优势。为什么不直接设置你需要的东西,测试一个,换掉 MPM 模块,再试一次,看看哪个更适合你?
这需要您将拥有的流量类型和种类。而且首先您需要了解 prefork 和 worker 之间的主要区别。希望下面的文章能帮助你弄清楚! http://slashroot.in/how-is-nginx-different-from-apache