19

我对在不同的配置(如 mod_php、cgi、FastCGI 等)中运行 PHP 有基本的想法。

在我的发现和测试中,我发现 FastCGI 稍好一些。我最喜欢 FastCGI 对 SuEXEC 的支持。等等,我不想再在这里涉足基准测试业务。如果您在网上冲浪,您会发现人们证明一种方式在每秒处理的请求数量方面比另一种方式更快。好吧,它的指标很好,但我对不同的因素感兴趣,这是我的问题......

  1. 哪种运行PHP的方法消耗的内存更少?
  2. 哪种方法消耗内存几乎是恒定的。我使用 mod_php 看到我的服务器内存使用量每隔几秒就会在 300MB 和 800MB 之间波动。
  3. 但是使用 FastCGI,来自服务器的第一个响应来得很晚。我看到 FastCGI 每个网页请求都有一个初始延迟。一旦服务器的第一个响应到达,图像、css、js 等其他项目的加载速度就会更快。
  4. 两者混合运行可以吗?我在专用服务器上有 5 个站点。如果我用 mod_php 运行几个并用 FastCGI 休息可以吗?
  5. 我确信我的服务器出现故障主要是因为 mod_php 的内存使用不当。我检查了所有脚本。有什么方法可以确保服务器上的内存消耗几乎保持不变?
  6. .htaccess 的复杂性是否会显着影响内存使用?如果是,是否是导致服务器内存不足的单一原因?
  7. apache MPM prefork/worker 设置会影响内存消耗吗?它们是否同样影响 mod_php 和 FastCGI 模式?
  8. 当我运行“top”命令时,我看到 apache (httpd) 消耗了大约 40MB 的内存。有许多 httpd 正在运行的实例。此外,FastCGI 还分叉了一些类似大小的进程。httpd 进程的正常内存大小是多少?
  9. 当我在我们所有的网站上运行 Wordpress 时,在这种情况下哪一个是好方法?
  10. FastCGI/SuExec 能否与 APC 一起正常工作?我是否需要重新配置 APC 才能使用 SuEXEC 和 FastCGI。

请注意,我对在 DIGG 或流量高峰中生存不太感兴趣。我想要一种可以使服务器稳定且可预测的方法。

对不起,如果我感到困惑,但我真的一团糟。我有 512MB 物理 RAM,400MB 交换,我的服务器内存快用完了。平均内存需求约为 350MB,它只是内存使用高峰使内存在几秒钟内不可用,如果在这几秒钟的窗口中收到的额外命中数很少,apache 崩溃,而 mysql 和所有其他人继续正常运行。

请帮帮我。我不会购买更多的 RAM 或硬件。我很确定问题出在我的配置中。对不起,如果我听起来傲慢或无知。

4

2 回答 2

19

哪种运行PHP的方法消耗的内存更少?

我假设每个 PHP 处理的请求它们或多或少是相同的。但是,如果您也将 mod_php 加载到 apache 服务图像中,那么我认为由于服务静态文件,您的内存占用会更高。

哪种方法消耗内存几乎是恒定的。我使用 mod_php 看到我的服务器内存使用量每隔几秒就会在 300MB 和 800MB 之间波动。

您可以使两者都保持不变。如果你仔细设置 MaxClients、MinSpareServers 和 MaxSpareServers,你几乎可以知道有多少进程正在运行。如果你还在 PHP 配置中设置了 memory_limit,你可以计算出你需要多少内存。你也可以对 fcgi 做同样的事情,因为你可以决定有多少进程正在运行。

但是使用 FastCGI,来自服务器的第一个响应来得很晚。我看到 FastCGI 每个网页请求都有一个初始延迟。一旦服务器的第一个响应到达,图像、css、js 等其他项目的加载速度就会更快。

这没有意义。我不确定为什么会发生这种情况。

两者混合运行可以吗?我在专用服务器上有 5 个站点。如果我用 mod_php 运行几个并用 FastCGI 休息可以吗?

我想,但维护起来将是一场噩梦,并且可能更难配置以节省内存。我相信恰恰相反。

我确信我的服务器出现故障主要是因为 mod_php 的内存使用不当。我检查了所有脚本。有什么方法可以确保服务器上的内存消耗几乎保持不变?

如上所述配置内存和进程,并继续监控。

.htaccess 的复杂性是否会显着影响内存使用?如果是,是否是导致服务器内存不足的单一原因?

我不这么认为。每个目录的 .htaccess 可以减慢速度,但除非 Apache 中有一些严重的错误,否则它不应该导致大量内存消耗。

apache MPM prefork/worker 设置会影响内存消耗吗?它们是否同样影响 mod_php 和 FastCGI 模式?

可能,但我建议远离工作人员,因为 PHP 大多不是线程安全的。

当我运行“top”命令时,我看到 apache (httpd) 消耗了大约 40MB 的内存。有许多 httpd 正在运行的实例。此外,FastCGI 还分叉了一些类似大小的进程。httpd 进程的正常内存大小是多少?

30MB 是最小值。上限取决于您的应用程序(我见过大约 1GB 的情况)

当我在我们所有的网站上运行 Wordpress 时,在这种情况下哪一个是好方法?

这可能是一个品味问题。我最近从 apache 转向 nginx+fastcgi。需要一些时间来适应,但它确实运作良好。wordpress 没有任何问题(即使是超级缓存也没有,它涉及到网络服务器)。

FastCGI/SuExec 能否与 APC 一起正常工作?我是否需要重新配置 APC 才能使用 SuEXEC 和 FastCGI。

我没有使用 suExec,但 fastcgi 与 APC 配合得很好。无需配置任何东西。

于 2009-12-22T01:32:59.053 回答
3

尝试切换到mod_php,许多人声称它的速度。没有意识到mod_php在提供静态文件 时会消耗额外的内存。(我不太关心根拥有文件的安全问题)。

Without a CDN setup, fastcgi is your choice for serving PHP apps. Without it, switching from fcgi to mod_php slowed my page generation time way down, from 3895ms to 6264ms (admin pages on shared hosting).

于 2011-12-15T21:41:49.473 回答