![在 apache 配置中使用 prefork 还是 worker?](https://linux22.com/image/528148/%E5%9C%A8%20apache%20%E9%85%8D%E7%BD%AE%E4%B8%AD%E4%BD%BF%E7%94%A8%20prefork%20%E8%BF%98%E6%98%AF%20worker%EF%BC%9F.png)
我有 apache 服务器版本(Apache/2.2.13)并且我想使用 MPM 模块但是我不知道使用 prefork 或 worker 什么以及我需要什么配置?
规格:
内存:4G
CPU:英特尔(R)至强(R)CPU E5405 @ 2.00GHz
grep -c 处理器 /proc/cpuinfo 8
每个 Apache 进程的最大大小:23M
答案1
答案是“视情况而定”——它可能取决于以下因素:
您是否计划在 Apache 环境中使用 PHP?如果是这样,那么使用 worker MPM 可能不适合您参见此链接因为某些 PHP 模块不是线程安全的。
您是否计划执行可能需要锁定文件的操作?如果是这样,那么使用 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 工作器,因为它更适合现代系统(多进程、多线程)。