fastcgi和fpm有什么区别?


117

我正在尝试在macports上使用fpm安装php。我在某处读到fpm表示FastCGI进程管理器。这是否意味着fastcgi和fpm相同?如果它们相同,那么为什么我们要为PHP提供两个不同的macports变体,即 “ php5 + fastcgi”“ php5 + fpm”

Answers:


94

FPM是一个过程管理器,用于管理PHP中的FastCGI SAPI(服务器API)。

基本上,它代替了诸如SpawnFCGI之类的东西。它自适应地生成FastCGI子级(意味着如果当前负载需要,则启动更多)。

否则,它与FastCGI之间没有太大的操作区别(从请求开始到结束的请求管道是相同的)。它只是在那里使实现起来更加容易。


8
php-fpm的一个关键优势是可以在多个进程之间共享一个APC缓存。使用fcgid,APC缓存按进程进行。使用fpm可以节省大量内存,这使您可以使用节省的内存来产生更多的进程并提供更多的流量。
cam8001 2013年

25
@ cam8001:完全不对。您可以设置SpawnFCGI要生成的进程数,以及每个进程的PHP子级数。因此,生成具有100个子代的1个PHP进程与使用具有100个子代的FPM是相同的事情。但是,反之亦然。如果FPM被杀死(分段错误,无论如何),您的整个工作人员都会死亡。在SpawnFCGI中,如果其中一个进程死亡,则其余进程可以保持活动状态……因此,显然没有一个比另一个更好。不同的方法。推荐FPM并不是出于技术原因,而是因为它沿侧面核心保持(实际上是在其中)...
ircmaxell 2013年

56

Anthony所说的是绝对正确的,但是我想补充一点,您的经验可能会显示出更好的性能和效率(由于不是fpm-vs- fcgi而是更多地是您的实现httpd)。

例如,我有一个四核机器运行lighttpd+ fcgi一直很好哼唱。我升级到16核计算机以应对增长,两件事发生了爆炸:RAM使用率和段错误。我发现自己lighttpd每30分钟重新启动一次,以保持网站正常运行。

我切换到php-fpm和nginx,RAM的使用量从> 20GB降至2GB。分段故障也消失了。经过一些研究,我了解到lighttpd和fcgi在负载下的多核计算机上相处不佳,并且在某些情况下还存在内存泄漏问题。

是因为比... php-fpm更好fcgi吗?不完全是,但怎么给你提供最基本php-fpm似乎是一个整体heckuva很多比你如何通过服务更加高效fcgi


8
这样的问题会持续到2017年4月吗?
卢勋爵。

1
建议对您使用的lighttpd和fpm版本进行任何更新,但仍然出现上述问题的任何更新(2018年6月)对社区也有帮助。
伊马(Ima)

0

将PHP作为CGI运行意味着您基本上可以将Web可执行文件的位置告知Web服务器,并且服务器将运行该可执行文件

PHP FastCGI流程管理器(PHP-FPM)是PHP的替代FastCGI守护程序,它允许网站处理繁重的负载。PHP-FPM维护池(可以响应PHP请求的工作人员)来完成此任务。对于多用户PHP环境,PHP-FPM比传统的基于CGI的方法(例如SUPHP)要快。

但是,两者都有优点和缺点,应该根据其特定用例进行选择。

我发现关于fastcgi vs fpm的此链接上的信息对于选择在我的方案中使用哪个处理程序很有帮助。

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.