httpd的prefork、worker、event

  Apache(httpd) 有3种核心MPM(Multi-Processing Module,多进程处理模块)工作模式,分别是prefork,worker和event,其中httpd-2.2的event模式仍然为测试使用的模型,而httpd-2.4的event模式则可在生产环境中使用。如果是通过yum安装的httpd服务,3种工作模式的配置文件默认在/etc/httpd/conf/httpd.conf中。

Apache的Multipath processing Modules (多路处理模块)

prefork MPM,多进程模型,每个进程响应一个请求

  一个主进程:负责生成子进程及回收子进程,负责创建套接字,负责接收请求并将其派发给某子进程进行处理;
  n个子进程:每个子进程处理一个请求;
  工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求。

prefork的默认配置(httpd2.2)
<IfModule prefork.c>
    StartServers       8     #进程启动后立即启动的空闲进程数量
    MinSpareServers    5     #最小空闲进程数量
    MaxSpareServers   20     #最大空闲进程数量
    ServerLimit       256    #一个周期内允许最大的进程数量
    MaxClients        256    #最大允许启动的服务器子进程数量
    MaxRequestsPerChild  4000   #允许最大请求的数量(超过数量就会关闭该进程,设置为0则永不过期)
</IfModule>

 (1)prefork:多进程模型,每个进程响应一个请求;
  一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
      n个子进程:每个子进程处理一个请求;
      工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;
    (2)worker:多进程多线程模型,每线程处理一个用户请求;
      一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
      多个子进程:每个子进程负责生成多个线程;
      每个线程:负责响应用户请求;
      并发响应数量:m*n
            m:子进程数量
      n:每个子进程所能创建的最大线程数量;
    (3)event:事件驱动模型,多进程模型,每个进程响应多个请求;
    一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
    子进程:基于事件驱动机制直接响应多个请求;
      httpd-2.2: 仍为测试使用模型;
      httpd-2.4:event可生产环境中使用;

worker MPM,多进程多线程模型,每个线程处理一个用户请求

  一个主进程:负责生成子进程,创建套接字;负责接收请求,并将其派发给某子进程进行处理;
  n个子进程:每个子进程负责生成多个线程;
  每个线程:负责响应用户请求,其并发响应数量为:m*n (m:子进程数量;n:每个子进程所能创建的最大线程数量)。

worker的默认配置(httpd2.2)
<IfModule worker.c>
    StartServers         3
    MaxClients         300
    MinSpareThreads     25
    MaxSpareThreads     75
    ThreadsPerChild     25   #每个子进程所能创建的最大线程数量
    MaxRequestsPerChild  0   #0表示不限制
</IfModule>

httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;CentOS 6的rpm包为此专门提供了三个应用程序文件,httpd(prefork), httpd.worker, httpd.event,分别用于实现对不同的MPM机制的支持;确认现在使用的是哪下程序文件的方法:
ps  aux  | grep httpd
默认使用的为/usr/sbin/httpd,其为prefork的MPM模块 ;
查看httpd程序的模块列表:
查看静态编译的模块:
# httpd  -l
查看静态编译及动态编译的模块:
# httpd  -M

event MPM,事件驱动模型(多进程模式),每个进程响应多个请求

  一个主进程 :负责生成子进程,负责创建套接字,负责接收请求并将其派发给某子进程进行处理
  n个子进程:基于事件驱动机制直接响应多个请求,其并发响应数量为:m*n (m:子进程数量;n:每个子进程响应的请求数量)。

<IfModule mpm_event_module>(httpd2.4)
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>
附:httpd2.2默认没有给出event模型的配置内容,但从测试运行的结果来看,配置应该同worker模型接近。

更换使用httpd程序,以支持其它MPM机制;
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.{worker,event}

对比httpd2.2和httpd2.4

  ①httpd2.2不支持同时编译多个MPM模块,只能在编译时选定要使用哪个,为此rpm包提供了三个应用程序文件:httpd(prefork), httpd.worker, httpd.event,分别用于实现对不同的MPM机制的支持;默认使用的模块为/usr/sbin/httpd,其为prefork的MPM模块。

    如果要更改MPM,直接修改配置文件/etc/sysconfig/httpd

        HTTPD=/usr/sbin/httpd.{worker,event}

    修改后重启服务service httpd restart,此时可通过 ps aux | grep httpd 或 htttpd -M | grep mpm查看是否更换成功。

  ②httpd2.4支持动态编译多个MPM模块,如果要更换MPM,修改配置文件 /etc/httpd/conf.modules.d/00-pmp.conf

        LoadModule mpm_{worker,event}_module modules/mod_mpm_{worker,event}.so

    修改后重启服务systemctl restart httpd.service,此时可通过 ps aux | grep httpd或 htttpd -M | grep mpm查看是否更换成功。

 

附:httpd2.4.6没有直接给出3种mpm的默认配置,但是通过/usr/share/doc/httpd-2.4.6/httpd-mpm.conf文件可以查看到相关的配置;如果我们想修改配置可参考文档修改/etc/httpd/conf/httpd.conf文件即可。此处我修改了worker mpm,内容如下:

金沙官网线上 1

httpd2.4切换成worker模型,需要修改配置文件/etc/httpd/conf.modules.d/00-mpm.conf,内容如下:

金沙官网线上 2

  重新启动httpd服务,发现有7条线程;即使是默认的配置也是会多出1条线程,没有找到原因:

金沙官网线上 3

金沙官网线上,注意:重启服务进程方可生效

MPM配置:/etc/httpd/conf/httpd.conf
prefork的配置
<IfModule prefork.c>
StartServers      8 # 服务器刚启动是就启动多少个空闲进程
MinSpareServers    5 # 最小空闲进程数
MaxSpareServers  20 # 最大空闲进程数
ServerLimit      256 # 最大启动多少个进程
MaxClients      256 # 最大启动多少个进程响应客户端请求。最大并发数
MaxRequestsPerChild  4000 # 每个进程最多可以处理多少个请求,达到4000个就销毁一个进程
</IfModule>

worker的配置:
<IfModule worker.c>
StartServers        4 # 服务器刚启动是就启动多少个空闲进程
MaxClients        300 # 最大启动多少个进程响应客户端请求。最大并发数
MinSpareThreads    25 # 最小空闲进程数
MaxSpareThreads    75 # 最大空闲进程数
ThreadsPerChild    25 # 每个进程最大可生成多少个线程
MaxRequestsPerChild  0 # 进程处理的请求数量不受限制
</IfModule>

PV:Page View:日点击量,有多少个页面被点击。

CentOS6.8编译安装Apache2.4.25、MySQL5.7.16、PHP5.6.29  http://www.linuxidc.com/Linux/2016-12/138993.htm

CentOS 6.6下安装Apache 2.2.31 http://www.linuxidc.com/Linux/2017-02/140803.htm

本文由金沙官网线上发布于操作系统,转载请注明出处:httpd的prefork、worker、event

您可能还会对下面的文章感兴趣: