Apache MPM - Worker 与 Prefork

Ali*_*xel 14 php nginx lighttpd php-fpm apache-2.2

我试图找出我可以在我的 VPS 上安装的最好的 Apache MPM。我看到了一些基准测试,MPM Worker 似乎比 Prefork 性能更好,但出于某种原因,每个人似乎都推荐 Prefork 而不是 Worker 用于 PHP 设置。

这仅仅是因为某些 PHP 函数不是线程安全的吗?只是setlocale()想到,但我将在每个实例上使用相同的语言环境,所以我认为这不会成为问题。我的 VPS 内存不足,我觉得工作 MPM 更适合我的需求,但是我不确定。

有人可以帮我下定决心吗?谢谢!


PS:我还研究了 nginx 和 lighttpd。nginx 看起来很棒,但我试图避免从源代码编译,我仍然不太明白 php-fpm 的用途。关于 lighttpd - 用它设置 PHP/FCGI 非常容易,但我听说它有内存泄漏。这仍然是真的吗?

dia*_*0ne 13

使用 apache + mod_php 时应该使用 prefork。常见问题解答清楚地概述了原因:

http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2

为什么我不应该在生产环境中使用带有线程 MPM 的 Apache2?

PHP 是胶水。它是用于通过将数十个 3rd 方库粘在一起并通过直观且易于学习的语言界面将它们全部显示为一个连贯的实体来构建酷 Web 应用程序的粘合剂。PHP 的灵活性和强大功能依赖于底层平台的稳定性和健壮性。它需要一个可用的操作系统、一个可用的 Web 服务器和可用的 3rd 方库来粘合在一起。当其中任何一个停止工作时,PHP 需要一些方法来识别问题并快速修复它们。当你没有完全独立的执行线程、完全独立的内存段和一个强大的沙箱来让底层框架变得更加复杂时,PHP 的系统就会引入更多的弱点。

nginx + php-fpm 也是运行 php 应用程序的绝佳方式。nginx 原生支持 FastCGI,而 php-fpm 是在 FastCGI 环境中运行 php 的最佳方式之一。请参阅此处的 php 文档:

http://www.php.net/manual/en/install.fpm.php