fastcgi和fpm有什么区别?

Dee*_*thy 112 php macos fastcgi macports

我想在macports上用fpm安装php.我在某处读到fpm意味着FastCGI流程管理器.这是否意味着fastcgi和fpm是一样的?如果它们是相同的,那么为什么我们有两个不同的macports变种用于php,即 "php5 + fastcgi""php5 + fpm"

irc*_*ell 91

FPM是一个管理PHP中的FastCGI SAPI(服务器API)的流程管理器.

基本上,它取代了对SpawnFCGI之类的需求.它自适应地生成FastCGI子节点(意味着如果当前负载需要它,则启动更多).

否则,它与FastCGI之间的操作差别不大(从请求开始到结束的请求管道是相同的).它只是让它更容易实现.

  • @ cam8001:这完全不正确.您可以在`SpawnFCGI中设置要生成多少个进程,以及每个进程的PHP子进程数.因此产生1个PHP进程,有100个孩子与使用FPM和100个孩子相同......但是,反之亦然.如果FPM被杀死(段错,无论如何),你的整个工作人员都会死亡.在SpawnFCGI中,如果其中一个进程死掉,剩下的就可以保持活着......所以它不是一个明显优于其他的进程.不同的方法.推荐FPM不是出于技术原因,而是因为它是沿着侧面核心(实际上是它)维护的...... (24认同)
  • php-fpm的一个关键优势是可以跨多个进程共享一个APC缓存.使用fcgid,APC缓存是按进程进行的.使用fpm可以节省大量内存,这使您可以使用保存的内存来生成更多进程,并提供更多流量. (7认同)

小智 55

安东尼所说的是绝对正确的,但我想补充一点,你的经验可能会表现出更好的性能和效率(不是因为fpm-vs- fcgi而是更多的是你的实施httpd).

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

我切换到php-fpm和nginx,RAM使用率从> 20GB降至2GB.Segfaults也消失了.在做了一些研究之后,我了解到lighttpd和fcgi在加载的多核机器上不能很好地相处,并且在某些情况下也存在内存泄漏问题.

这是因为php-fpm好于fcgi?并非完全如此,但你如何进入php-fpm似乎是一个整体heckuva比你通过如何服务更有效fcgi.

  • 这些问题到现在为止(2017年4月)? (8认同)
  • 建议对您使用的 lighttpd 和 fpm 版本进行任何更新,对仍然出现的上述问题(2018 年 6 月)的任何更新也对社区有帮助。 (2认同)

小智 13

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

然而

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

然而,两者各有利弊,应根据具体用例进行选择。

我发现此链接上有关fastcgi 与 fpm的信息对于选择在我的场景中使用哪个处理程序非常有帮助。