Apache MPMs – 工人vs Prefork

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

这只是因为一些PHP函数不是线程安全的? 想起来只有setlocale() ,但是我将在每个实例上使用相同的语言环境,所以我不认为这会是一个问题。 我的VPS有一点记忆,我觉得工人MPM会更适合我的需求,但是我不确定。

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


PS:我也看过nginxlighttpd。 nginx看起来很棒,但我试图避免从源代码编译,我仍然不明白什么是PHP-FPM。 关于lighttpd – 使用它设置PHP / FCGI令人难以置信,但我听说它有内存泄漏。 这是真的吗?

在使用apache + mod_php时,你应该使用prefork。 常见问题清楚地概述了为什么:

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

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

PHP是胶水。 通过将数十个第三方库粘合在一起,并通过直观易学的语言界面将它们看作是一个统一的实体,从而构build出酷炫的Web应用程序。 PHP的灵活性和强大function依赖于底层平台的稳定性和健壮性。 它需要一个工作的操作系统,一个工作的Web服务器和工作的第三方库粘合在一起。 当任何这些停止工作的PHP需要方法来确定问题,并迅速解决它们。 当你通过没有完全独立的执行线程,完全独立的内存段和强大的沙盒来让底层框架更复杂时,PHP的系统中会引入更多的弱点。

nginx + php-fpm也是运行php应用程序的好方法。 nginx对FastCGI有本地支持,php-fpm是在FastCGI环境下运行php的最佳方式之一。 请参阅这里的PHP文档:

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