Apache里的 MPM 调优

一,Apache即现阶段比较流行的Web服务,是一个多模块化的Web服务,使用简单,速度快,稳定性好,可以做负载均衡及代理服务器来使用,Apache的核心模块叫做多路模块处理(Multi-Processing Mudule,简称MPM)。各个系统有不同的模块,windows使用mpm_winnt,linux用mpm_prefork或mpm_worker。当编译时没有指定mpm模块是,windows默认用mpm_winnt,linux默认用mpm_perfork。

二,查看Apache当前用的是哪个MPM:linux及windows下都可以使用命令:“httpd -l ” 进行查询。mpm的配置文件在apache安装目录/conf/extra/httpd-mpm.conf。默认apache没有启用mpm,httpd.conf需添加“Include conf/extra/httpd-mpm.conf”。mpm_winnt:单进程多线程。
mpm_perfork:多进程。
mpm_worker:多进程多线程。

三,根据情况选择合适的模块,修改Apache配置文件

(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下那样同时启动多个进程。
        ThreadsPerChild:每个子进程的最大并发线程数。
        MaxRequestsPerChild:每个子进程允许处理的请求总数。如果累计处理的请求数超过该值,该子进程将会结束(然后根据需要确定是否创建新的子进程),该值设为0表示不限制请求总数(子进程永不结束)。建议设为非零值,可以带来以下两个好处是,1,可以防止程序中可能存在的内存泄漏无限进行下去,从而耗尽内存。2,给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
ThreadLimit,默认1920,最大15000,限制单个进程的线程总数。

参考文章:https://www.cnblogs.com/liuxuzzz/p/5346700.html

                  https://www.cnblogs.com/flashicp/archive/2012/06/11/2545076.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值