我正在尝试在macports上安装带有fpm的php。我在某个地方读到fpm代表FastCGI进程管理器。这是否意味着fastcgi和fpm是相同的?如果它们相同,那么为什么我们有两个不同的macports变体来安装php,即"php5 + fastcgi"和"php5 + fpm"?
我正在尝试在macports上安装带有fpm的php。我在某个地方读到fpm代表FastCGI进程管理器。这是否意味着fastcgi和fpm是相同的?如果它们相同,那么为什么我们有两个不同的macports变体来安装php,即"php5 + fastcgi"和"php5 + fpm"?
安东尼所说的完全正确,但我想补充一点的是,你的经验很可能会展现出更好的性能和效率(这不是由于fpm
和fcgi
之间的差别引起的,而更多地是由于你的httpd
实现方式)。
例如,我有一台四核机器运行着lighttpd
+ fcgi
非常顺畅。为了应对增长,我升级到了16核的机器,结果两件事情爆炸了:内存使用和段错误。我发现自己每30分钟重启lighttpd
以保持网站运行。
我转换到了php-fpm
和nginx,内存使用从> 20GB降至2GB。段错误也消失了。经过一些研究,我发现在负载下,lighttpd和fcgi在多核机器上无法很好地配合,并且在某些情况下存在内存泄漏问题。
这是因为php-fpm
比fcgi
更好吗?并非完全如此,但你通过php-fpm
连接方式似乎比你使用fcgi
服务要高效得多。
将PHP作为CGI运行意味着您基本上告诉您的Web服务器PHP可执行文件的位置,然后服务器运行该可执行文件。
而
PHP FastCGI进程管理器(PHP-FPM)是用于PHP的另一种FastCGI守护程序,允许网站处理繁重的负载。 PHP-FPM维护池(可以响应PHP请求的工作者)来完成此操作。对于多用户PHP环境,PHP-FPM比传统的基于CGI的方法(如SUPHP)更快。
然而,两者都有利弊,应根据具体情况选择。我在fastcgi vs fpm链接中找到了有关如何选择在我的情况下使用哪种处理程序的信息,这很有帮助。
SpawnFCGI
中设置要生成多少进程,以及每个进程中的PHP子进程数量。所以生成一个拥有100个子进程的PHP进程,与使用拥有100个子进程的FPM是相同的... 然而,相反的情况是正确的。如果FPM被杀死(段错误等),整个工作进程都会死亡。在SpawnFCGI中,如果其中一个进程死亡,其他进程可以继续运行... 所以这并不明确哪种方法更好。这是不同的方法。FPM之所以推荐,并非出于技术原因,而是因为它实际上是核心的一部分,可以得到维护... - ircmaxell