zoukankan      html  css  js  c++  java
  • Apache里的 MPM 调优比较详细

    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,限制单个进程的线程总数。

  • 相关阅读:
    D
    NOI 1.7编程基础之字符串(35题)
    HYSBZ 2145 悄悄话
    POJ 2406 Power Strings
    POJ 3461 Oulipo[附KMP算法详细流程讲解]
    POJ 3974 Palindrome
    POJ 1002 487-3279
    POJ 1182 食物链
    POJ 2524 Ubiquitous Religions
    HDU 1251 统计难题
  • 原文地址:https://www.cnblogs.com/flashicp/p/2545076.html
Copyright © 2011-2022 走看看