2、Apache(httpd)之一 三种工作模式

httpd的特性:

  • 高度模块化:core + modules
  • 模块化设计DSO:Dynamic Shared Object
  • MPM:Multipath Processing Modules 多路处理模块

perfork MPM:多进程模型,每个进程响应一个请求  (并发模型不能超过1024个)

   一个主进程:负责生成子N个子进程及回收子进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个。负责创建套接字,负责接收请求并将其派发给某子进程进行处理;
   n个子进程:每个子进程处理一个请求;
   工作模型:会预先生成N个空闲进程,随时等待用于响应用户请求。      

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

 

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>

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模型接近。

对比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,内容如下:

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

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

并发服务器响应请求:

  单进程I/O模型

  多进程I/O模型

  复用的I/O模型:多线程模型和事件驱动

  利用的多进程I/O模型

https://www.cnblogs.com/walk1314/p/9112249.html

猜你喜欢

转载自www.cnblogs.com/liuzhiyun/p/11737289.html