在 apache 配置中使用 prefork 还是 worker?

在 apache 配置中使用 prefork 还是 worker?

我有 apache 服务器版本(Apache/2.2.13)并且我想使用 MPM 模块但是我不知道使用 prefork 或 worker 什么以及我需要什么配置?

规格:

内存:4G

CPU:英特尔(R)至强(R)CPU E5405 @ 2.00GHz

grep -c 处理器 /proc/cpuinfo 8

每个 Apache 进程的最大大小:23M

答案1

答案是“视情况而定”——它可能取决于以下因素:

  1. 您是否计划在 Apache 环境中使用 PHP?如果是这样,那么使用 worker MPM 可能不适合您参见此链接因为某些 PHP 模块不是线程安全的。

  2. 您是否计划执行可能需要锁定文件的操作?如果是这样,那么使用 worker MPM 可能不适合您。线程不是完整的 POSIX 进程,因此不一定遵守文件锁定操作。

    例如,Subversion 版本 < 1.5 - 这些版本使用 apr 和 apr-util 库,使用 Berkeley DB 执行提交。Berkeley DB 依赖于锁定,因此这可能会导致提交损坏您的存储库

关键是要弄清楚您要用 Apache 服务做什么 - 您如何提供服务,后端进程如何运行以构建要提供的数据。

  • 您是否只是通过 mod_proxy 或 AJP 与 Tomcat 服务交互?通常使用 worker 就可以了。
  • 您是否使用 Apache 模块(SVN、PHP 就是两个例子)?在这种情况下,prefork 可能更安全。
  • 您是否在使用 NFS (并不总是支持正确锁定文件系统)?prefork 可能还是更安全的选择。

YMMV - 但最终你需要了解底层架构才能对此做出真正的判断。如果你不了解架构,那么就使用 prefork,因为它是更安全的路线。

答案2

如果您只使用线程安全模块(例如,没有任何非线程安全扩展的 mod_php),那么您绝对应该选择 MPM 工作器,因为它更适合现代系统(多进程、多线程)。

相关内容