抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Apache 目前一共有三种稳定的 MPM 模式。它们分别是 prefork/worker 和 event,它们同时也代表 Apache 的演变和发展。今天杜老师就聊下 event 模式!

event 模式的工作原理

event 是 Apache 最新的工作模式,和 worker 模式很像,不同的是在于它解决了 keep-alive 长连接时候占用线程资源被浪费的问题。

event 工作模式中,会有一些专门的线程用来管理这些 keep-alive 类型线程,当真实请求过来的时候,将请求传递给服务器的线程,执行完毕之,又允许它释放。这样,一个线程就可以几个请求了,实现了异步非阻塞。这增强了在高并发场景下的请求处理。

event 工作模式在遇到某些不兼容模块时,如果,将会回退到 worker 模式,一个工作线程处理一个请求。官方自带模块全部支持 event 工作模式的。

event 工作模式需要 Linux 系统对 epoll 支持,才能启用。需要补充的是 HTTPS 的连接,它的运行模式仍然类似 worker 的方式,线程会被一直占用,知道连接关闭。

event 模式的装方法

在编译安装 Apache 的过程中,加入参数–with-mpm=event 即进行编译安装。

也可以使用–enable-mpms-shared=all,这样在编译的时候会在 modules 目录下自动编译出三个 MPM 文件的 so,然后通过修改 httpd.conf 配置文件更改 MPM 即可。

worker 模式的配置参数说明

配置说明
StartServers 3服务启动时初始进程数,默认为 3
MinSpareThreads 75最小空闲子进程数,默认为 75
MaxSpareThreads 250最大空闲子进程数,默认为 250
ThreadsPerChild 25每个子进程产生的线程数量,默认是 25
MaxRequestWorkers 400限定同一时间内客户端最大接入的请求数,默认是 400
MaxConnectionsPerChild 0每个子进程在其生命周期内允许最大请求数量,如果请求总数已经达到这个数值,子进程将结束,如果设置为 0,子进程将永远不会结束。将值设置为非 0 值,可以防止运行 PHP 导致的内存泄露

工作模式与 Web 应用选择

Apache 能更好的为有特殊要求的站点定制。例如,要求更高伸缩性的站点可以选择使用线程的 MPM,即 worker 或 event。

需要可靠性或者与旧软件兼容的站点则可以使用 prefork。就使用 PHP 而言,FastCGI 和 PHP-FPM 是更推荐的使用模式。

评论