您的位置:首页 > 运维架构 > Apache

Apache里的 MPM 调优比较详细

2015-10-15 10:28 603 查看
1、什么是MPM?

Multi-Processing Module (MPM) implements a hybrid multi-process multi-threaded server。(多进程、多线程)

2、有多少种MPM?

大致有:prefork MPM、worker MPM、BeOS MPM、NetWare MPM、OS/2 MPM、WinNT MPM。

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

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

4、各个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,限制单个进程的线程总数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: