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 服务启动时初始进程数,默认为
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是更推荐的使用模式。

评论