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

prefork模式的工作原理

prefork模式是很古老但是非常稳定的模式。用的是多个子进程,Apache在启动之初,控制进程会建立若干子进程,然后等待请求进来,并且总是视图保持一些备用的子进程。为不在请求到来时再生成子进程,所以需要根据需求不断的创建新的子进程,最大可以达到每秒32个直到满足需求为止。之所以这样做,是为减少频繁创建和销毁进程的开销。每个子进程中只有一个线程,在一个时间点,只能处理一个请求。

在Unix系统,父进程通常以root身份运行以便绑定80端口,而Apache产生的子进程通常以一个低特权用户运行。User和Group指令用于配置子进程的低特权用户。运行子进程的用户必须要对它所服务的内容有读取权限,但对服务内容之外的其它资源必须拥有尽可能少的权限。

prefork模式的安装方法

在编译安装Apache的过程中,加参数–with-mpm=prefork即可,如不加也可以,因为Apache默认采用prefork模式进行编译安装。

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

prefork模式优缺点

优点:成熟,兼容所有新老模块。进程之间完全独立,使它非常稳定。同时,不需要担心线程安全的问题。

缺点:一个进程相对占用更多系统资源,消耗更多内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等有可用进程,请求才被处理。

prefork模式的配置参数说明

配置参数说明如下:

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

评论