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 导致的内存泄露

本文链接:https://my.lmcjl.com/post/18899.html

展开阅读全文

4 评论

留下您的评论.