在内存使用方面,PHP作为thttpd模块与CGI

时间:2008-10-23 14:55:14

标签: php module cgi sapi thttpd

我打算在嵌入式环境中使用php。我们当前的Web服务器是thttpd。我现在正在考虑两个选项:是将其作为cgi还是作为SAPI模块运行。我知道cgi在安全性方面具有优势。但是如果我们要使用php作为cgi,那么应该为每个请求将一个php实例加载到内存中。

我已经尝试将其编译为thttpd的SAPI模块,我观察到thttpd的内存使用量,特别是rss,随着请求数量的增加而不会变大。

任何人都可以解释thttpd如何加载php?只要thttpd正在运行,它是否只加载一次并保持驻留在内存中?如果是这样,我们可以将其视为cgi的替代方案。

它是否执行多线程,即如果同时有多个http请求?或者它一次处理一个请求?

有没有一篇很好的文档讨论php作为thttpd模块的行为?

1 个答案:

答案 0 :(得分:1)

我没有使用thttpd的经验,但这里有一些指示:

  • PHP引擎是线程安全的,但有些扩展不是,因此通常人们不愿在多线程环境中使用它,而是采用单进程 - 一个请求方法
  • 是的,通常网络服务器模块(比如Apache mod_ *的东西)通过驻留来工作,但PHP的一个重要速度是它需要解析源文件(如果使用include / require,甚至需要解析多个源文件)每个请求。你可以通过使用APC来缓存文件的解析版本
  • 来减少这种情况
  • 还有一个名为FastCGI的协议,您可能需要查看它 - 它基本上是模块和CGI解决方案之间的交叉 - 它会旋转几个进程,每个进程都承载一个CGI问题的实例(PHP在这种情况下)并使用它们来处理请求。实例被回收(即,它们可以一个接一个地处理多个请求)。