我有一个数据库密集型的 PHP 应用程序,可以运行数小时来处理和建立数千个外部网络连接。
任何时候,连接到此应用程序的用户都不会超过 3 个。
哪个 apache mpm 最适合这种工作负载,prefork/mod_php 还是 worker/mod_fcgid?
我正在使用 Debian Lenny x64,单核,4GB 内存。
答案1
对于较慢的机器,工作模式效果更好,并且 CPU 使用率和负载更低。
对于提供静态内容的强大机器,prefork mpm 大约快 5%。
如果您有机会使用 apache 基准测试进行一些测试,我建议您:Apache 基准
另外,您可以看看这个基准:Apache prefork 与 worker
您的数据库引擎安装在同一台服务器上吗?
答案2
Apache 有两个广泛使用的 MPM 模块 - Worker MPM 和 Pre-fork MPM。PHP.net 建议您使用 Pre-fork MPM,而大多数站点优化专家会建议您使用线程化的 Worker MPM。令人惊讶的是,负载测试显示性能差异相对较小 - 当然不会促使您在服务器上采用不推荐的实现。
答案3
通过 FastCGI 的 Worker + PHP 往往运行良好,历史上很多人建议不要将 mod_php 与任何线程 MPM 一起使用(因为一些第四方库不能很好地与之配合使用),使用 FastCGI 基本上将 PHP 从 Web 服务器“分离”,避免了这个问题。
另一个优点是现在 apache 线程/进程大小更小,因此您可以为 Web 服务器使用更多线程/进程(提供静态内容),而使用少量 PHP 进程来执行网站的动态部分。