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. python3.5.3rc1学习四:类

    class calculator: def add(x,y): return x + y print(added) def sub(x,y): return x - y print(sub) def ...

  2. 题解:swj社会摇基础第一课

    题目链接 思路:dp,f[i]表示构成i所需要的最小步数 //swj么么哒 #include<bits/stdc++.h> using namespace std; int n; cons ...

  3. springboot项目jar包运行

    springboot项目jar包运行 参考 Linux后台运行java的jar包 步骤 进入maven项目中,打包项目. mvn package -Dmaven.test.skip=true 运行ja ...

  4. kettle工具字符串替换

    原数据: 去掉括号内容(包括括号,或者替换为指定内容) 即可. 世界之大,这个东西,准确的说正则表达式,我搞了小半天!!!

  5. aliyun-oss 通过redis来实现跨域上传图片到阿里 OSS并回显进度条

    public class PutObjectProgressListener implements ProgressListener {        private long bytesWritte ...

  6. 第四组 团队Git现场编程实战

    组员职责分工 组员 分工 林涛(组长) 分配任务.整理数据.写博客 童圣滔 UI界面制作 林红莲 UI界面制作 潘雨佳 测评出福州最受欢迎的商圈 于瀚翔 测评出福州最受欢迎的商圈 覃鸿浩 测评出福州人 ...

  7. Istio Routing极简教程

    官网文档: https://istio.io/docs/reference/config/networking/#VirtualService 在学习像Istio这样的新技术时,看一下示例应用程序总是 ...

  8. Linux网络编程基础API

    第5章 Linux网络编程基础API 探讨Linux网络编程基础API与内核中TCP/IP协议族之间的关系,并未后续章节提供编程基础.从3个方面讨论Linux网络API. socket地址API.so ...

  9. 【mysql报错】MySQL5.7.27报错“[Warning] Using a password on the command line interface can be insecure.”

    MySQL5.7.27报错“[Warning] Using a password on the command line interface can be insecure.”在命令行使用密码不安全警 ...

  10. 更改hosts文件解决 Git无法连接到github

    问题描述 inmeditation@sunlizhao MINGW64 ~/Desktop/hexob(1) $ ssh -T git@github.com ssh: connect to host ...