我正在尝试找出哪个是我可以在我的 VPS 上安装的最佳 Apache MPM。我查看了一些基准测试,MPM Worker 似乎比 Prefork 性能更好,但出于某种原因,似乎每个人都推荐在 PHP 设置中使用 Prefork 而不是 Worker。
这仅仅是因为某些 PHP 函数不是线程安全的吗?我唯一setlocale()
想到的就是这个,但我将在每个实例上使用相同的语言环境,所以我认为这不会成为问题。我的 VPS 内存很少,我觉得 worker MPM 更适合我的需求,但我不确定。
有人能帮我决定一下吗?谢谢!
附言:我还研究了 nginx 和 lighttpd。nginx 看起来很棒,但我试图避免从源代码编译,而且我仍然不太明白 php-fpm 的用途。关于 lighttpd - 使用它设置 PHP/FCGI 非常容易,但我听说它有内存泄漏。这仍然是真的吗?
答案1
使用 apache + mod_php 时应使用 prefork。FAQ 清楚地概述了原因:
http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2
为什么不应该在生产环境中使用带有线程 MPM 的 Apache2?
PHP 是粘合剂。它是构建酷炫 Web 应用程序的粘合剂,它将数十个第三方库粘合在一起,并通过直观且易于学习的语言界面使它们看起来像一个连贯的实体。PHP 的灵活性和强大功能依赖于底层平台的稳定性和稳健性。它需要一个可以运行的操作系统、一个可以运行的 Web 服务器和可以运行的第三方库来粘合在一起。当其中任何一个停止工作时,PHP 需要找到方法来确定问题并快速修复它们。当您使底层框架变得更加复杂时,没有完全独立的执行线程、完全独立的内存段和每个请求都适用的强大沙箱,PHP 系统就会出现更多弱点。
nginx + php-fpm 也是运行 php 应用程序的绝佳方式。nginx 原生支持 FastCGI,而 php-fpm 是在 FastCGI 环境中运行 php 的最佳方式之一。请参阅此处的 php 文档: