• Apache MPM Prefork模式参数调优方法


    Apache配置文件中有非常多的参数,绝大多数Apache都是运行于mpm_prefork模式下,而对prefork参数的调试至关重要。prefork模式对每个不同的请求使用不同的进程,因此能够避免非常多的安全问题。它具有强大的自我调节能力,能够比较智能的适应不同压力的访问。

    调整性能参数并非纸上谈兵,需要在调整的每一步都对服务器进行负载压力测试,以确保在服务器稳定的基础下实现最高的性能。

    参数解释

    Apache的MPM配置文件主要有如下几段:

    1 <IfModule mpm_prefork_module>
    2 StartServers 10
    3 MinSpareServers 5
    4 MaxSpareServers 15
    5 MaxClients 200
    6 MaxRequestsPerChild 5000
    7 </IfModule>

    其中MaxClients、MinSpareServers与MaxSpareServers是关键。

    MaxClients决定了Apache最多创建多少个子进程用来处理请求。进一步举例解释,如果这个参数设置为200(如图),则当Apache主进程收到大量请求时,会创建最多200个进程。而这200个进程用于处理这些请求。因此,无论有多少个请求,也只会有200个进程并行处理。

    MaxSpareServers顾名思义是“最多空闲进程”,注意“空闲”二字。接上一个例子,当这200个进程处理完了所有的请求后,这些进程便都“空闲”了。此时Apache便会杀死一些进程以释放资源。那么,如上图设置,Apache会保留最多15个空闲的进程;

    MinSpareServers是“最少空闲进程”。当Apache启动时,如果空闲的进程少于5个,则会以一定频率创建新的进程,直到满足这个数值(5)。这样设计的目的是为了让Apache更迅速的应付潜在的访问高峰。

    StartServers表示Apache在启动的时候创建的进程数量。如果访问压力很大,那么进程数会逐步增加,直到达到MaxClients设置的数量。

    MaxRequestPerChild表示每个进程处理的最大请求数。当任何一个子进程处理的请求数达到MaxRequestPerChild后,便会自杀。如果MaxRequestPerChild设置为0,表示不限(即永远不自杀)。这种机制的作用是防止潜在的内存泄露。如果Apache的某个模块,或者某段php脚本可能导致内存泄露,而处理进程却又永远不退出,则很可能造成服务器内存剧增最终崩溃。当开启这个机制后,无论是否存在内存泄露,都会让进程在处理一定数量的请求后退出,同时释放所有内存。

    调优约束条件

    MaxClients参数的最佳值在很大程度上取决于内存大小。此参数调优的目标即当Apache处在最多子进程数状态时,服务器不会使用swap。如果此数值的设置过大,则Apache在访问高峰期会创建过多的子进程,导致Linux使用swap来作为内存。而swap的效率非常低,并且会导致磁盘压力增大,形成恶性循环。

    如果希望Apache能在访问非高峰期过后能够迅速的释放资源,则MaxSpareServers应该设置得略低,让Apache迅速杀死过多的子进程;

    如果希望Apache能够迅速应对突如其来的访问高峰,则应将MinSpareServers设置高一点,让Apache创建较多的空闲(备用)进程。

    而MaxRequestPerChild对性能的影响则没有那么明显。如果MaxRequestPerChild设置偏小,则Apache可能会在访问高峰期时,把大量的CPU消耗在创建/杀死进程上,造成不必要的CPU损耗。

    Prefork机制

    prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。

    这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。

    如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。 MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。

  • 相关阅读:
    安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)
    VM虚拟机安装 常用Linux命令 网卡配置 (第二天)
    数据库的交互模式 常用的dos命令 (第一天)
    Validate US Telephone Numbers FreeCodeCamp
    Arguments Optional FreeCodeCamp
    Everything Be True FreeCodeCamp
    Binary Agents FreeCodeCamp
    Steamroller FreeCodeCamp
    Drop it FreeCodeCamp
    Smallest Common Multiple FreeCodeCamp
  • 原文地址:https://www.cnblogs.com/wjlstation/p/2788859.html
Copyright © 2020-2023  润新知