• 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中。

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

      一个主进程:负责生成子进程及回收子进程,负责创建套接字,负责接收请求并将其派发给某子进程进行处理;
      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条线程,没有找到原因:

  • 相关阅读:
    父div的透明度不影响子div透明度
    vue-组件命名
    前端页面优化技巧
    Webstorm添加新建.vue文件功能并支持高亮vue语法和es6语法
    防止被坑
    vue安装教程总结
    vue找错
    前段进阶之路
    VM4061 layui.js:2 Layui hint: form is not a valid module
    三月十一号
  • 原文地址:https://www.cnblogs.com/walk1314/p/9112249.html
Copyright © 2020-2023  润新知