Apache MPM-Worker与Prefork


13

我正在尝试找出可以在VPS上安装的最佳Apache MPM。我看到了一些基准测试,MPM Worker似乎比Prefork性能更好,但是由于某些原因,每个人似乎都建议在PHP设置中使用Prefork over Worker。

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

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


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


2
问题是,尽管现在应该假定核心PHP是线程安全的,但在扩展方面,所有赌注都没有了。
mattdm 2011年

Answers:


12

使用apache + mod_php时,应使用prefork。FAQ明确列出了原因:

http://www.php.net/manual/zh-CN/faq.installation.php#faq.installation.apache2

为什么我不应该在生产环境中将Apache2与线程MPM一起使用?

PHP是胶水。它是通过将数十个第三方库粘贴在一起并通过直观且易于学习的语言界面将它们全部显示为一个连贯的实体来构建出色的Web应用程序的粘合剂。PHP的灵活性和功能取决于底层平台的稳定性和鲁棒性。它需要一个正常工作的OS,一个正常工作的Web服务器和正常工作的第三方库才能粘合在一起。当这些方法中的任何一种停止工作时,PHP需要一些方法来找出问题并快速解决。当您通过没有完全分开的执行线程,完全分开的内存段和用于播放每个请求的强大沙箱使基础框架变得更加复杂时,PHP的系统将引入更多的弱点。

nginx + php-fpm也是运行php应用程序的绝佳方法。nginx对FastCGI具有本地支持,而php-fpm是在FastCGI环境中运行php的最佳方法之一。请在此处查看php文档:

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


关于Apache MPM,我想我明白了,前叉是要走的路。由于Apache的高内存消耗,我倾向于使用nginx或lighttpd设置。轻巧地安装时,Lighttpd和PHP-FCGI可以立即使用,但是我不确定是否每个人都在回溯06/07的内存泄漏仍然存在。我还读到Nginx的CPU使用率较低,但我无法使其与PHP-CGI一起使用,更不用说与PHP-FPM一起使用了。有使用包管理器在Ubuntu上安装此方法的简便方法吗?您是否建议阅读有关此主题的文章?
Alix Axel

启用multiverse后,我可以在lucid上“ apt-get install nginx”,并且运行起来就像冠军-我在生产系统上使用。这里有一个很好的起点示例,howtoforge.com /…但与往常一样,YMMV。
Dialt0ne 2011年

我可以使用apt安装nginx,但无法将其绑定到PHP解释器。您提供的链接有一个似乎提供了php5-fpm软件包的新资源。我要尝试一下。
Alix Axel

这个链接可能更好howtoforge.com/…我正在将brianmercer回购用于php5-fpm的生产系统。
Dialt0ne 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.