fastcgi 和 fpm 有啥区别?
Posted
技术标签:
【中文标题】fastcgi 和 fpm 有啥区别?【英文标题】:What is the difference between fastcgi and fpm?fastcgi 和 fpm 有什么区别? 【发布时间】:2011-05-30 09:37:22 【问题描述】:我正在尝试在 macports 上使用 fpm 安装 php。我在某处读到 fpm 表示 FastCGI 进程管理器。这是否意味着 fastcgi 和 fpm 相同?如果它们相同,那么为什么我们有两个不同的 php macports 变体,即 "php5 +fastcgi" 和 “php5 +fpm”
【问题讨论】:
【参考方案1】:将 PHP 作为 CGI 运行意味着您基本上告诉 Web 服务器 PHP 可执行文件的位置,然后服务器运行该可执行文件
而
PHP FastCGI 进程管理器 (PHP-FPM) 是 PHP 的替代 FastCGI 守护程序,它允许网站处理繁重的负载。 PHP-FPM 维护池(可以响应 PHP 请求的工作人员)来完成此操作。对于多用户 PHP 环境,PHP-FPM 比传统的基于 CGI 的方法(例如 SUPHP)更快
但是,两者各有利弊,应根据其特定用例进行选择。
我在此链接上找到fastcgi vs fpm 的信息对于选择在我的场景中使用哪个处理程序很有帮助。
【讨论】:
【参考方案2】:Anthony 所说的绝对正确,但我想补充一点,您的体验可能会显示出更好的性能和效率(不是因为 fpm
-vs-fcgi
,而是更多的是因为您的 @ 987654323@).
例如,我有一台四核机器运行 lighttpd
+ fcgi
很好地嗡嗡作响。我升级到 16 核机器以应对增长,两件事爆发了:RAM 使用和段错误。我发现自己每 30 分钟重新启动一次 lighttpd
以保持网站正常运行。
我切换到 php-fpm 和 nginx,RAM 使用量从 >20GB 下降到 2GB。段错误也消失了。经过一番研究,我了解到 lighttpd 和 fcgi 在负载下的多核机器上不能很好地相处,并且在某些情况下还会出现内存泄漏问题。
这是因为php-fpm
比fcgi
更好吗?不完全是,但是如何你连接到php-fpm
似乎比你通过fcgi
服务的效率要高得多。
【讨论】:
这些问题直到(2017 年 4 月)左右吗? 建议对您使用的 lighttpd 和 fpm 版本进行任何更新,对仍然出现的上述问题(2018 年 6 月)的任何更新也对社区有所帮助。【参考方案3】:FPM 是一个进程管理器,用于管理 PHP 中的 FastCGI SAPI(服务器 API)。
基本上,它取代了对 SpawnFCGI 之类的需求。它自适应地生成 FastCGI 子代(意味着在当前负载需要时启动更多子代)。
否则,它和FastCGI在操作上没有太大区别(从请求开始到结束的请求管道是一样的)。它只是为了让实施变得更容易。
【讨论】:
php-fpm 的一个关键优势是一个 APC 缓存可以在多个进程之间共享。使用 fcgid,APC 缓存是每个进程的。使用 fpm 可以节省大量内存,这使您可以使用节省的内存来生成更多进程并提供更多流量。 @cam8001:这完全不是真的。您可以在SpawnFCGI
中设置要生成的进程数,以及每个进程的 PHP 子进程数。所以产生 1 个 PHP 进程,有 100 个子进程与使用 FPM 和 100 个子进程是一样的......但是,反过来也是如此。如果 FPM 被杀死(段错误,无论如何),你的整个工人都会死。在 SpawnFCGI 中,如果其中一个进程死亡,其余进程可以保持活动状态......所以这不是一个明确的一个比另一个更好的问题。不同的方法。推荐 FPM 不是出于技术原因,而是因为它是沿侧核心(实际上是在其中)维护的......以上是关于fastcgi 和 fpm 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
php的运行原理cgi对比fastcgi以及php-cgi和php-fpm之间的联系区别