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条线程,没有找到原因:

httpd的prefork、worker、event的更多相关文章

  1. Apache-三种工作模式(prefork/ worker/Event)

    Apache-两种工作模式(prefork/ worker/Event) Apache 2.X  支持插入式并行处理模块,称为多进程处理模块(MPM).在编译apache时必须选择也只能选择一个MPM ...

  2. Apache的多路处理模块MPM:Prefork Worker Event

    如何确认当前apache使用哪种模式 通过/etc/init.d/httpd中的来确认系统apache的运行脚本路径 apachectl=/usr/sbin/apachectl httpd=${HTT ...

  3. LAMP调优

    1.编译安装httpd前修改: 在安装包目录下  vim include/ap_release.h 搜索:BASEVENDOR   修改其八项隐藏curl -I http://地址  中的Server ...

  4. httpd常用配置

    author:JevonWei 版权声明:原创作品 检查配置文件时,如下提示,则因为没有server的服务名称导致,故设置网站的服务server名称,若没有设置web服务名,主默认解析系统主机名(添加 ...

  5. 编译httpd细节

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

  6. httpd三种MPM的原理剖析

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

  7. httpd的三种模式比较

    查看你的httpd使用了哪种模式: /usr/local/apache2/bin/httpd -V |grep 'Server MPM' 使用哪种模式,需要在编译的时候指定 --with-mpm=pr ...

  8. [PHP] apache在worker模式配置fastcgi使用php-fpm

    1.准备: dpkg -L apache2查看所有安装的apache2的应用 a2query -M查看apache2使用的模式 httpd -l旧版本查看当前apache模式 2.查看apache的进 ...

  9. httpd基础

    hpptd http服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS .asp tomcat .jsp jetty 开源的servlet容 ...

随机推荐

  1. php基础--取默认值以及类的继承

    (1)对于php的默认值的使用和C++有点类似,都是在函数的输入中填写默认值,以下是php方法中对于默认值的应用: <?phpfunction makecoffee($types = array ...

  2. Learn by pictures on Auto Control Fields

  3. android 调试卡在:Waiting for Debugger - Application XXX is waiting for the debugger to Attach" 解决方法

    解决方法:重启adb. 步骤:cmd进入命令行,进入adb所在目录先后执行adb kill-server,adb start-server.

  4. Java NIO(三) Buffer

    Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO ...

  5. Shader之性能优化

    1.像素>>顶点数>>物体个数:shader中的计算应首先考虑放在script,其次vert,最后frag中 2.尽量用精度小的类型替换精度大的类型(特别是在frag中,要尽可 ...

  6. redis的使用方式

    常用的语法以及使用方式:          key中不能包含回车空格等,key不要太长,占用内存.     概念介绍:         差集: a:{1,2,3} b:{2,3,4},以a为锚点,差集 ...

  7. SharePoint2010 HTTP Error 503. The service is unavailable 解决方法

    1.更改系统管理员用户密码前提 因为更改系管理员用户密码会影响到 "SharePoint2010"正常运行,所在尽量不要更改系统管理员用户的密码, 必须更改密码的话,需要注意以两点 ...

  8. SQL Server ->> 重新创建Assembly和自动重建相关的数据库编程对象(存储过程,函数和触发器)

    在SQL Server中,一旦一个Assembly被其他的数据库编程对象(存储过程,函数和触发器)引用了,这个Assembly就不能被删除.但是问题是,在SQL Server要更新一个Assembly ...

  9. (四)svn 服务器端的使用之创建工程目录

    仓库中存放开发项目代码.文档等,需要创建一个工程目录. 在之前创建的仓库中右键点击: 创建成功 trunk:项目开发代码的主体,是从项目开始直到当前都处于活动的状态,从这里可以获得项目最新的源代码以及 ...

  10. 用AutoHotkey重置Excel的Ctrl+Alt+方向键选择的范围

    当前选择是蓝色单元格,原来的Ctrl+Alt+方向键,是选中[蓝色]到[红色]单元格的区域, 经过脚本修改后,则是[蓝色]到[黄色]的区域,应该更符合日常使用, 特别是表格比较大的时候,一直按住鼠标滚 ...