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. 水平划分table

    大概10年前,接到的任务是要解决一个AuditTrail表的写入性能. performance test的时候,一晚上这个表可以长1百万行,在SQLServer归档到本地文件以后再去删除这1百万条记录 ...

  2. [日常] NOI前划水日记

    NOI前划水日记 开坑记录一下每天的效率有多低 5.24 早上被春哥安排了一场NEERC(不过怎么是qualification round啊) 省队势力都跑去参加THU/PKU夏令营了...剩下四个D ...

  3. SpringBoot启用https

    1.利用JDK自带的keytool生成证书 keytool -genkey -storetype PKCS12 -alias tomcat -keyalg RSA -keysize 2048 -key ...

  4. vue v-html 富文本解析 空格,换行,图片大小问题

    1.保留空格,换行属性 //保留换行空格问题 white-space: pre-wrap; 2.超出部分,强制换行,一般用于数字 //富文本换行 word-wrap: break-word; tabl ...

  5. Theano 报错:No suitable SharedVariable constructor could be found. Are you sure all kwargs are supported? We do not support the parameter dtype or type

    当Theano报错:No suitable SharedVariable constructor could be found. Are you sure all kwargs are support ...

  6. WebApi安全性 参数签名校验(结合Axios使用)

    接口参数签名校验,是WebApi接口服务最重要的安全防护手段之一. 结合项目中实际使用情况,介绍下前后端参数签名校验实现方案. 签名校验规则 http请求,有两种传参形式: 1.通过url传参,最常见 ...

  7. Logstash:多个配置文件(conf)

    Logstash:多个配置文件(conf) 对于多个配置的处理方法,有多个处理方法: 多个pipeline 一个pipleline处理多个配置文件 一个pipeline含有一个逻辑的数据流,它从inp ...

  8. .NET基础知识(01)-值类型与引用类型

    常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆 ...

  9. Python - 面向对象 - 第二十天

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  10. Microsoft.Office.Interop.Excel 读取 excel 中的 checkbox 和 radio

    using Excel = Microsoft.Office.Interop.Excel; Excel.Application excelapp = new Excel.Application(); ...