Apache使用哪种MPM在在安装的时候可以用
--with-mpm={beos|worker|prefork|mpmt_os2|perchild|leader|threadpool}
安装之后可以用httpd -l命令看到。

MPM的进程模块有有很多种( 见Apache官方文档:http://httpd.apache.org/docs-2.0/mod/)。
今天我主要是比较一下prefork MPM和worker MPM

httpd.conf的prefork的配置参数:

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers        35
MinSpareServers     80
MaxSpareServers     100
ServerLimit         1000
MaxClients          150
MaxRequestsPerChild  0
</IfModule>

prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,
等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,
直到满足MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,
从而减小了系统开销以增加性能。
MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,
但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,
可考虑同时加大MinSpareServers和MaxSpareServers。

MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。
  0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:
◆ 可防止意外的内存泄漏;
◆ 在服务器负载下降的时侯会自动减少子进程数。
因此,可根据服务器的负载来调整这个值。大家可以测试一下合适的值。

MaxClients是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。
其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l察看),那么后面的请求就要排队,
直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值。
虽然理论上这个值越大,可以处理的请求就越多。但是也不是越大越好,太大资源消耗完了也是影响×××。

ServerLimit的最大值是20000,对于大多数站点已经足够。如果一定要再加大这个数值,对位于源代码树下server/mpm/prefork/prefork.c中以下两行做相应修改即可:

define DEFAULT_SERVER_LIMIT 256
define MAX_SERVER_LIMIT 20000

httpd.conf的worker的配置参数:

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。
同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。
如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。
ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。
这时要显式使用ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行:

define DEFAULT_THREAD_LIMIT 64
define MAX_THREAD_LIMIT 20000

这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,
超过系统的处理能力,从而因Apache不起动使系统很不稳定。
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,
控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。
这两个值位于源码树server/mpm/worker/worker.c中的以下两行:

define DEFAULT_SERVER_LIMIT 16
define MAX_SERVER_LIMIT 20000

需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,
否则Apache将会自动调节到一个相应值(可能是个非期望值)。

转载于:https://blog.51cto.com/1353337/407556

Apache 的prefork MPM和worker MPM相关推荐

  1. Apache的prefork模式和worker模式

    prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请 ...

  2. 切换apache的prefork和worker模式

    Apache HTTP服务器被设计为一个强大的.灵活的能够在多种平台以及不同环境下工作的服务器. 不同的平台和不同的环境经常产生不同的需求,或是为了达到同样的最佳效果而采用不同的方法. Apache凭 ...

  3. apache的prefork和workder模式

    如何知道当前apache的应用模式 httpd -l   或者apache -l     如果有 prefork.c 那就是 prefork 方式,如果是 worker.c 那就是 work 模式还有 ...

  4. worker mpm php,Ubuntu 16.04 安裝 Apache2.4 + mpm_worker + fastcgi + php7.0

    之前寫過一篇 Ubuntu 16.04 在 Apache2.4 跑 PHP7.0 是用 mod_php 跑來的,而 mod_php 是使用 mpm_prefork 來跑,這篇主要要說的是 mpm_wo ...

  5. Apache DolphinScheduler征稿-- DolphinScheduler--master与worker的交互过程

    本文正在参与 "拥用源 – Apache DolphinScheduler有奖征稿活动" 海豚调度dolphinscheduler目前是 Apache 顶级项目,作为国内优秀的开源 ...

  6. Apache并发处理模块

    apache 2.x版本目前有好几种并发处理模块, 需要在编译的时候通过–with-mpm=xxx指定,常用的并发处理模式是prefork和worker.prefork这种模式比较古老,纯进程并发,没 ...

  7. Apache WEB 服务器企业实战

    万维网 (WORLD WIDE WEB,WWW)服务器,也称之为 WEB 服务器,主要功能 是提供网上信息浏览服务.WWW 是 Internet 的多媒体信息查询工具,是 Internet 上 飞快发 ...

  8. Linux下apache性能配置调优

    Apache 性能配置优化 ###httpd 相关查看命令了解 查看当前安装模块mpm(多路处理器) [root@localhost ~]# httpd -l 查看httpd进程数(即各个mpm模式下 ...

  9. apache性能配置优化

    最近在进行apache性能优化设置.在修改apache配置文件之前需要备份原有的配置文件夹conf,这是网站架设的好习惯.以下的apache配置调优均是在red had的环境下进行的. httpd相关 ...

最新文章

  1. PHP生成PDF完美支持中文,解决TCPDF乱码
  2. java中的stack类和C++中的stack类的区别
  3. Java中数组以及集合
  4. (转)__declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
  5. Android之layout属性介绍
  6. Linux学习总结(50)——grep查看打印匹配的下几行或前后几行使用总结
  7. 计算机网络学习笔记(22. Web应用概述)
  8. 智能一代云平台(三):15年上半年维护总结
  9. PAT 1103 Integer Factorization[难]
  10. linux如何关闭oracle数据库,linux关闭oracle数据库命令
  11. KaliLinux-masscan使用详解(全网最快的IP端口扫描神器)
  12. android源码百度网盘下载(AOSP源码集合)
  13. 产品案例分析 - 华为软件开发云
  14. 校园网账号在路由器上登陆
  15. 老杨推荐|初级到高级网工学习渠道最全汇总(建议收藏)
  16. 【转】中国北斗是咋回事?从GPS说起
  17. 用 m3u8 下载网页视频直接保存为 MP4
  18. 《卫报》评全球最具影响力博客50强 徐静蕾入选
  19. Ouino法国学习系统评价它是如何比其他学习软件
  20. 腾讯云轻量级服务器宝塔快速部署网站

热门文章

  1. 3天拆解数据分析全流程!
  2. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
  3. 男导师的妻子叫“师母”,那么女导师的丈夫该怎么称呼?
  4. 图解NumPy:常用函数的内在机制
  5. 重读经典:完全解析特征学习大杀器ResNet
  6. 阿里P9大佬总结必备的算法和工具,被10万算法工程师点赞
  7. 为什么应届生的身份这么值钱?
  8. 自然语言处理算法工程师历史最全资料汇总-基础知识点、面试经验
  9. linux服务器root的密码修改
  10. golang库context学习