mod_php之所以效率低于fastcgi php(php-fpm)

时间:2011-06-13 12:59:08

标签: webserver fastcgi mod-php

我看到大多数答案都认为mod_php的效率较低,因为服务静态文件(例如this one)会导致内存占用率更高。

但我的意见如下:

事实上,代码部分在fork() ed进程之间共享,因此内存占用谓词不应该成立。

我能想到的唯一原因是mod_php是非线程安全的,因此Web服务器只能为每个请求创建子进程。

在fastcgi模式下,Web服务器可以通过多路复用技巧提高性能,从而减少fork()开销。

总之,mod_php的缺点不是它的内存占用,而是fork()的开销,但如果mod_php可以是thread_safe,则fork()将不是必需的,这将是最有效的服务请求解决方案。

以上是我的意见,但不是100%肯定。

是吗?

1 个答案:

答案 0 :(得分:2)

分叉非常快,默认的apache + mod_php安装也是fork。 (除非使用工人mpm)。

真正的原因是(种类)如下:

标准mod_php将有相当大的进程,因为该进程包含php和所有其他apache模块等。如果 php在一个单独的进程中,php进程可以有更短的生命周期,并在PHP完成后快速将结果传递回apache。

另一个原因(正如你所提到的)是非PHP请求不涉及PHP。

使用FastCGI时可以切换到工作人员mpm的事实只是奖励;但确实增加了效率。

一般来说,对于这些类型的设计,您总是希望尽可能地将apache和php进程设置为短生命,并将它们拆分起来有所帮助。

但是.. forks 非常快,在某些设计中,它们实际上可以比Linux上的Thread更好地运行(没有来源,我只记得读过这个)。对于Web服务器类型的系统,我确实相信基于Reactor模式的系统工作得更好。 NGinx和Varnish是这方面的主要例子。