• 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

  • 相关阅读:
    hdu2037 今年暑假不AC[贪心][区间调度问题]
    Features Track[STL map]
    Characters with Hash[签到题]
    hdu2094产生冠军[STL set]
    2018ECNA Difference[时空复杂度]
    hdu1276士兵队列训练问题[简单STL list]
    20190815网络与信息安全领域专项赛线上赛misc WriteUp
    hdu1873 看病要排队[优先队列]
    Pygame 贪吃蛇
    Windows安装Python3 curses模块
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/11737289.html
Copyright © 2020-2023  润新知