文档章节

Apache MPM

liuxiaofan
 liuxiaofan
发布于 2016/04/13 16:35
字数 1315
阅读 61
收藏 2

1、 三种MPM介绍   

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

  Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

  这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

      Worker MPM : 此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

  每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理及reply

  不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。

  Event MPM:以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。 

对于Event 模式,apache给出了以下警告:

This MPM is experimental, so it may or may not work as expected .

这种MPM目前处于试验状态,他可能不能按照预期的那样工作。

2、 怎么知道apache当前用的是哪个MPM?

linux及windows下都可以使用命令:“httpd -l ” 进行查询。

3、 各个MPM是怎么工作及如何优化?

(1)prefork MPM

<IfModule mpm_prefork_module>
            StartServers                10
            MinSpareServers        10
            MaxSpareServers        15
            ServerLimit                  2000
            MaxClients                   1000
            MaxRequestsPerChild 10000
        </IfModule>

        启动时建立StartServers个子进程,

        然后按每秒创建指数级个进程直到达到MinSpareServers个进程(最多增到每秒32个),

        如果空闲进程数大于MaxSpareServers,则检查kill掉一些空闲进程。

        MaxRequestPerChild指定每个进程处理了多少个请求后就自我毁灭。

        MaxClients指定apache最多可以同时处理的请求数,也就是进程数?

        MaxClients默认不能大于256,可以通过设定ServerLimit来增大这个限制数,最大20000?

(2)worker:

<IfModule mpm_worker_module>
            StartServers                  3
            MaxClients                     2000
            ServerLimit                    25
            ThreadLimit                   200
            ThreadsPerChild            100
            MinSpareThreads         50
            MaxSpareThreads        200
            MaxRequestsPerChild   0
        </IfModule>

        启动时建立StartServers个子进程,

        每个进程包含ThreadsPerChild个线程,缺省最大64

        MinSpareThreads定义最小的空闲线程数,最大75

        MaxSpareThreads定义最大的空闲线程数,超过则执行清理?最大250

        MaxClients定义所有子进程中的线程总数

        ThreadLimit,最大20000,默认64

        ServerLimit,最大值20000,默认16

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

(3)WinNT MPM:

<IfModule mpm_winnt_module>
            ThreadsPerChild         500
            MaxRequestsPerChild 10000
        </IfModule>

        mpm_winnt.c是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。

ThreadLimit,默认1920,最大15000,限制单个进程的线程总数。


© 著作权归作者所有

liuxiaofan
粉丝 0
博文 96
码字总数 38986
作品 0
枣庄
后端工程师
私信 提问
加载中

评论(0)

Apache优化:修改最大并发连接数

Apache是一个跨平台的web服务器,由于其简单高效、稳定安全的特性,被广泛应用于计算机技术的各个领域。现在,Apache凭借其庞大的用户数,已成为用户数排名第一的web服务器。 尽管如此,在实...

EDIAGD
2014/02/13
1K
0
Apache 三种工作模式介绍

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

科技小能手
2017/11/12
0
0
编译安装apache

./configure --prefix=/application/apache.2.2.27/ //安装时指定安装位置 --enable-deflate //对传输文件进行压缩 --enable-expires //浏览器缓存 --enable-headers //激活http头部 --enab......

Zach_legend
2017/05/31
0
0
Apache的三种MPM模式比较:prefork,worker,event

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

stone_ryan
2016/03/05
0
0
centos6 编译安装httdp2.4

httpd-2.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。 这里选择使用编译源代码的方式进行 1、解决依赖关系 ...

再出发Brave
2017/10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis学习笔记——数据类型之有序集合类型

介绍 在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数。 集合中每个元素都是不同的,分数可以相同。 有序集合和列表的异同 相同点 二者都是有序的。 二者都可以获得某一个...

PS板砖
30分钟前
23
0
比较两个MySQL数据库[关闭]

我目前正在使用MySQL数据库开发应用程序。 数据库结构仍在不断变化中,并且随着开发的进展而变化(我更改了本地副本,仅将其保留在测试服务器上)。 有没有一种方法可以比较数据库的两个实例...

javail
42分钟前
28
0
Joomla搜索生态系统介绍

您在网站上花费多长时间?对我来说,它永远不会超过2分钟。研究表明,您从Baidu搜索获得的自然访问者平均每个网站花费53秒。而您的直接访客通常花费1分钟50秒。当然,它可能会根据您的受欢迎...

六艺网络专注于Joomla
45分钟前
35
0
linux基础第五周

1、查找/etc目录下大于1M且类型为普通文件的所有文件 find /etc -size +1M -type f 2、打包/etc目录下所有conf结尾的文件,压缩包名称为当天时间,并拷贝到/usr/local/src目录备份 tar Jcvf...

大雨雨雨雨雨
52分钟前
29
0
在C#中使用Finalize / Dispose方法

C#2008 我已经为此工作了一段时间,但我仍然对在代码中使用finalize和dispose方法感到困惑。 我的问题如下: 我知道在处理非托管资源时我们只需要一个终结器即可。 但是,如果存在调用非托管...

技术盛宴
58分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部