多年来我一直在使用mpm-prefork模块,因为据我了解,这是 Apache 2 和 1.3 的首选工作器。
现在我将安装一些新的 Apache 服务器,并使用较新的 2.4 版本,事件基于使用 epoll/kqueue 的 mpm。
我知道在过去几年中,基于事件的系统已经风靡一时(例如 nginx、lighttpd、node.js),因此由于 mpm-event 现在在 Apache 中已经很稳定,这是首选的多处理模块吗?
我还注意到了 mpm-event 文档页面中的评论:
改进的连接处理尚不适用于某些连接过滤器,尤其是 SSL。对于 SSL 连接,此 MPM 将恢复为工作 MPM 的行为并为每个连接保留一个工作线程。
我们的主要站点强制使用 SSL 连接,因此很明显,我们不会从与保持活动相关的改进的连接处理中受益,但我的理解是否正确,由于线程较少,性能仍然会有所改进?
答案1
多年来,prefork MPM 一直不是“首选”的 MPM。
它仍然是许多发行版的默认设置,原因是一些第三方库在 worker MPM 中的线程方面存在问题(这有自 2.2 版以来一直是首选的 MPM)。
不是像 mod_php 这样的模块,它是线程安全的,而是库用过的通过类似 mod_php 的模块,例如 mysqli 等。
在 2.4 中,我们现在已经切换到 STABLE 事件 MPM。
该版本仍然很新,并且文档尚未完全更新以反映这一点。
多年来的情况一直是这样,如果 prefork MPM 让您感到困扰,请切换到线程服务并通过 fastCGI 运行您的动态内容。