l  prefork:域fork,一个进程一个请求

l  worker:一个线程一个请求,一个进程生成多个线程

l  event:事件模型,单线程响应多个请求,基于事件驱动

在主配置文件当中,在httpd程序启动时,会探测当前运行的是哪一种MPM模块,如果是prefork会怎样?如果是woker会怎样?如果是event会怎样?

NOTE:一个成熟的运维一定会对这一小节的内容倒背如流,如果连小节的内容都不能熟练记忆的话,说自己是运维就是诈骗,诈骗~

prefork的工作机制:httpd主程序会生成一个子进程来响应自己负责侦听到套接字上,生成子进程需要按照自己复制一个,是需要时间的,等到请求来到之后再复制明显是来不及的,所以在进程没有到来之前其实就已经准备好了,一旦有请求进来就直接分配一个子进程响应,不用临时创建了,那么问题来了,预先创建多少个是好呢(最小空闲数)?要是一下子进来一千个,要准备1000个进程吗?一下子去退去之后子进程怎样办(最大空闲数)?回收多少呢?所以有规定:最大请求数,最大空闲数。规定最大请求数是因为prefork的工作机制是基于select事件分离器工作的,select的文件描述符最大也就是1024,也就是prefork引用1024个进程就已经是理论上限了,prefork是大之能同时处理1024个进程,实际上很可能达不到1024.平时如果没有请求是httpd主进程也要创建最小空闲数个空进程等待请求,如果一下子涌进500个请求,但事先只创建了200个空进程,在200个空进程没有用完之前就要再创建空进程。如果500个进程一下子都退去了,留下500个空进程回收时,保留最大的空闲数,余下的回收。如果一下子余下10000个请求,httpd有些无能为力,nginx可以。

过上图我们会看到默认会启动4个进程,每个进程允许启动的线程数是25个,也就是说默认启动的线程数是4*25也就是100个,但是,但是,但是,你有没有注意到,还有一个参数就是MaxSpareThreads最大的空闲线程数是75个,所以默认会启动4个进程也就是100线程,100线程违反了最大空闲线程数,自己会杀掉25个线程,所以在我们看来,好像一会是3个进程,一会是4个进程。

worker的工作机制:一个主进程生成若干个子进程,每个子进程生成多个线程,每个线程响应一个请求,这是一种三级结构,那么每个子进程能够生成多少个线程呢?肯定有一个参数规定最大线程数的,假如说一个子进程可以生成25个线程,而每个线程响应一个请求,是不是性能比prefork要好的多呢?并不是这样的,因为每个进程里面的线程相互之间也要需要切换的,切换的多了,也是消耗性能的,而且,性能与prfork不分上下。

event的工作进程:基于事件驱动的机制,真正意义上实现了一个线程响应多个请求。event-driven(事件驱动),主要目的在于实现单线程响应多个请求。

解释一下MAXRequestsPerChild,这个是每个子进程的生存周期,一个子进程服务完一个请求之后会被立刻杀死吗?可能会,如果服务完请求之后后面没有请求后可能会被杀死,但是不一定,如果这个进程默认启动的最小空闲进程当中的一个的话还不会杀死,如果后面还有请求的话,httpd的主机进程肯定不会把此子进程给干掉的,因为干掉之后还要重新创建一个子进程来响应,现在有一个现成的,实在是犯不上!!所以这个子进程会被继续使用,这个子进程不断被重复使用会一个次数,这里定义的4000其实就是这个子进程被重复使用的次数,超过个次数之后就会被干掉,然后重新生成一个。

worker是三级结构,肯定会通过root启动一个主进程,然后再通过主进程生成多个子进程,然后再通过子进程生成多个线程,每个线程负责一个请求,当然在配置文件当中会对主进程启动的子进程的个数、并发请求的最大数、最小空闲的线程数、最大空闲的线程数、每个子进程可生成的线程数、每个  子进程在生命周期内所能够服务的最多的请求个数做限定。

三种MPM在工作时的属性的更多相关文章

  1. apache2.4.x三种MPM介绍

    三种MPM介绍                                                                               Apache 2.X  支持 ...

  2. httpd三种MPM的原理剖析

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  3. Apache Prefork、Worker和Event三种MPM分析

    三种MPM介绍 Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到 ...

  4. Apache2 三种MPM对比分析

    就最新版本的Web服务器Apache(版本是Apache 2.4.10,发布于2014年7月21日)来说,一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式. ...

  5. java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)

    1.重点掌握: html: 1.form表单:input,checkbox,seelct,radio,button,submit 2.table表格:thead-->tr-->th;tbo ...

  6. (转)失败和拒绝,也是一种肯定 找工作时,我四处碰壁这一段经历对自己职业生涯的帮助最大。为什么? "因为这些挫折让我的脸皮变厚了 如果你不是每天被人拒绝,那就说明你的人生目标不够远大 所谓成功,就是不停地经历失败,并且始终保持热情

    (转)失败和拒绝,也是一种肯定 昨天,先是看到一个老外,说了一句很震撼的话. "你个人的项目,应该有四分之一会失败,否则就说明你的冒险精神不够." (Expect and hope ...

  7. QT下的几种透明效果(三种方法:调色板,透明度属性,自绘)

    1.窗口整体透明,但是窗体上的控件不透明.    通过设置窗体的背景色来实现,将背景色设置为全透.  QPalette pal = palette();  pal.setColor(QPalette: ...

  8. apache 三种工作模式的讲解

    Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速 ...

  9. HTTPD三种工作模型

    HTTPD三种工作模型 MPM是apache的多道处理模块,用于定义apache对客户端请求的处理方式.在linux中apache常用的三种MPM模型分别是prefork.worker和event. ...

随机推荐

  1. python多版本共存pip指向问题

    这两天一致被一个问题困扰,电脑里装了anaconda和python3.7,在命令行里输入python,想要python3.7,出现的确实python3.6,或使用pip安装包时,不知道是装在里pyth ...

  2. 区块链自问自答 day1

    区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 ​ 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...

  3. LinkCutTree学习笔记

    LinkCutTree 学习笔记 参考来源 https://www.zybuluo.com/xzyxzy/note/1027479 https://www.cnblogs.com/zhoushuyu/ ...

  4. CF1178D Prime Graph

    题目链接 题意 构造一张有\(n(3\le n\le 1000)\)个点的无向图(无重边和自环).满足: 边的总数为素数 所有点的度数均为素数 输出方案 solution 如果所有点的度数确定了.那么 ...

  5. HDU 6298(数学)

    题意是给出一个数,找出这个数的三个因子且这三个因子的和等于这个数,输出满足条件的乘积最大的一组因子的乘积,如果不存在这样的因子,就输出 -1. 第一次 wa 了,因为把题目中的 x | n 当做了位或 ...

  6. BDFramework.Core 学习

    x哥(懂的都懂)的框架, 拿点代码过来做注释. 想了解详情可以去他的github https://github.com/yimengfan/BDFramework.Core # Object file ...

  7. linux的命令操作

    linux的命令操作 1.日常操作命令 **查看当前所在的工作目录pwd **查看当前系统的时间 date **查看有谁在线(哪些人登陆到了服务器)who 查看当前在线last 查看最近的登陆历史记录 ...

  8. 2019 SDN上机第4次作业

    1. 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本) 配置java环境 安装OpenDayLight控制器 2. 启动并安装插件 cd distribution-ka ...

  9. PHP自动加载-spl_autoload_register

    spl_autoload_register 自动加载spl : Standard PHP library (标准PHP库) 首先来了解 __autoload print.class.php <? ...

  10. sierpinski垫片(3D)[误]

    今天是因为可以用py而高兴的一天. 昨天老板淡淡地回了一句,sierpinski地毯画得挺好的. 我思考了五秒钟之后,想起来作业其实是sierpinski垫片.     三角垫片比地毯难做多了. 因为 ...