httpd的特性:

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

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

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

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

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

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

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

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

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

<IfModule mpm_event_module>(httpd2.)
StartServers
MinSpareThreads
MaxSpareThreads
ThreadsPerChild
MaxRequestWorkers
MaxConnectionsPerChild
</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

2、Apache(httpd)之一 三种工作模式的更多相关文章

  1. Apache的三种工作模式及相关配置

    Apache的三种工作模式 作为老牌服务器,Apache仍在不断地发展,就目前来说,它一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块).它们分别是 prefor ...

  2. httpd2.4.6三种工作模式(如何配置),防止占用内存暴增的策略

    之前偷懒默认用yum安装了httpd.后来发现服务器内存暴增,一度达到75% 打开一看,好嘛后台休眠进程全是httpd. 重启之后再度访问发现内存还是稳步增长. [root@iz2ze3ayxs2yp ...

  3. VMWare提供了三种工作模式上网

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

  4. VMWare三种工作模式 :bridge、host-only、nat

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...

  5. VMWare虚拟机网络的三种工作模式

    VMWare提供了三种工作模式: 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,需要手工为虚拟系 ...

  6. 转载-LVS的三种工作模式

    来源地址:http://www.uml.org.cn/zjjs/201211124.asp 1.lvs简介         lvs是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立 ...

  7. LVS集群的三种工作模式

    LVS的三种工作模式: 1)VS/NAT模式(Network address translation) 2)VS/TUN模式(tunneling) 3)DR模式(Direct routing) 1.N ...

  8. 2.LVS的三种工作模式_NAT模式

    1.LVS的三种工作模式 1)VS/NAT模式(Network address translation) 2)VS/TUN模式(tunneling) 3)DR模式(Direct routing) 1. ...

  9. LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

    一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现 ...

随机推荐

  1. 【洛谷 P3346】 [ZJOI2015]诸神眷顾的幻想乡(后缀自动机)

    题目链接 广义sam+不同子串个数.. 找到所有入度为\(0\)的点开始\(dfs\),建出广义sam. 然后就是不同子串个数了 #include <cstdio> #include &l ...

  2. React 中的 定义组件的 两种方式

    React 中创建 Components 的方式有两种:Function and Class 定义一个组件最简单的方法就是写一个 JavaScript 函数 function Welcome(prop ...

  3. Multipath 多路径配置说明

    查看主机或者存储交换机上的www号,在存储上将LUN映射给需要的主机 cat  /sys/class/fc_host/host*/port_name 0x2002d0431efb7f5d 6d 该ww ...

  4. HDFS-SecondaryNameNode(SNN)角色介绍

    它出现在Hadoop1.x版本中,又称辅助NameNode,在Hadoop2.x以后的版本中此角色消失.如果充当datanode节点的一台机器宕机或者损害,其数据不会丢失,因为备份数据还存在于其他的d ...

  5. Flume 初探

    Apache 是一个高可用.高可靠的,分布式的海量日志采集.聚合.传输系统,基于流式架构,灵活简单. Flume 最主要的作用就是实时读取服务器本地磁盘的数据,将数据写入HDFS中. Flume组成架 ...

  6. Kubernetes 1.15部署日记-使用kubeadm--<7-8>

    7. 在k8s集群中run一个应用 nginx已经跑起来了到此kubernetes集群部署结束了. 8. 总结 此次部署kubernetes的起因是AI团队中的kubernetes项目跑在其他IP段网 ...

  7. Go数据类型之复合数据类型--Slice

    3.2 Slice 一个slice是一个轻量级的数据结构,提供了访问数组子序列(或者全部)元素的功能,而且slice的底层确实引用一个数组对象. 一个slice由三个部分构成:指针.长度和容量.指针指 ...

  8. Linux磁盘管理——Ext2文件系统

    前言 通常而言,对于一块新磁盘我们不是直接使用,而是先分区,分区完毕后格式化,格式化后OS才能使用这个文件系统.分区可能会涉及到MBR和GPT问题.至于格式化和文件系统又有什么关系? 这里的格式化指的 ...

  9. 安装CDH 5.15.1详解

    安装CDH 5.15.1详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.安装Cloudera Manager 和CDH 1>.登陆Cloudera Manager ...

  10. 农业银行网上支付平台-商户接口编程-demo调试

    调试的时候会报一个这样的错误. ReturnCode = [1999]ErrorMessage = [系统发生无法预期的错误 - 第1个证书无法读取证书文档] 网上其他资料说是权限问题,有的人可能是权 ...