zoukankan      html  css  js  c++  java
  • Apache优化之多路处理模块理解

    前言:

       当项目被多人访问时导致访问数度变慢,查了许多资料,了解到Apache的核心模块——MPM(多路处理访问模块)。在此对MPM的一些知识点进行整理。

    • MPM_WINNT模块
    1. windows系统使用的模块
    2. 创建一个子进程
    3. 该子进程轮流产生多个线程来处理请求
    • MPM_PREFORK模块
    1. Unix/Linux系统使用的模块
    2. Apache启动时默认创建5个子进程
    3. 一个子进程处理一个请求
    4. 优点:每个子进程对应一个请求,请求间避免相互影响
    5. 缺点:占用系统的资源相对较多
    • MPM_WORKER模块
    1. Unix/Linux系统的使用模块
    2. 对于MPM_prefork的改进
    3. 每个子进程创建固定的线程和一个监听的线程
    4. 监听线程用来接入请求并将其传递到服务线程处理和应答

      基于进程比基于线程的处理方式占用的系统资源要多。(后续再整理一波进程和线程的概念,现在想起来很模糊)

    配置:

      配置相应的MPM首先需要打开Apache配置文件Apacheconfhttpd.conf

      

      如上图将前面的;去掉,这样就可以引入MPM的配置文件了(默认是未启用的)

      

      然后打开httpd-mpm.conf文件进行配置

      

      (这是一张盗图,请笑纳)

    • MPM_WINNT模块
      <IfModule mpm_winnt_module>
      ThreadsPerChild      150 #推荐设置:小型网站=1000 中型网站=1000~2000 大型网站=2000~3500
      MaxRequestsPerChild    0 #推荐设置:小=10000 中或大=20000~100000
      </IfModule>
      ThreadsPerChild:每个子进程的最大并发线程数。 
      MaxRequestsPerChild:每个子进程允许处理的请求总数。如果累计处理的请求数超过该值,该子进程将会结束(然后根据需要确定是否创建新的子进程),该值设为0表示不限制请求总数(子进程永不结束)。 
      该参数建议设为非零的值,可以带来以下两个好处: 
      1. 可以防止程序中可能存在的内存泄漏无限进行下去,从而耗尽内存。 
      2. 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
      
      注意:在以上涉及到统计请求数量的参数中,对于KeepAlive的连接,只有第一个请求会被计数。
    • MPM_PREFORK模块
      <IfModule mpm_prefork_module>
      StartServers          5 #推荐设置:小=默认 中=20~50 大=50~100
      MinSpareServers       5 #推荐设置:与StartServers保持一致
      MaxSpareServers      10 #推荐设置:小=20 中=30~80 大=80~120 
      MaxClients          150 #推荐设置:小=500 中=500~1500 大型=1500~3000
      MaxRequestsPerChild   0 #推荐设置:小=10000 中或大=10000~500000
      </IfModule>
      # StartServers:  数量的服务器进程开始
      # MinSpareServers:  最小数量的服务器进程,保存备用
      # MaxSpareServers:  最大数量的服务器进程,保存备用
      # MaxRequestWorkers:  最大数量的服务器进程允许开始
      # MaxConnectionsPerChild:  最大连接数的一个服务器进程服务

    • MPM_WORKER模块
    <IfModule mpm_worker_module>
    StartServers          2 #推荐设置:小=默认 中=3~5 大=5~10
    MaxClients          150 #推荐设置:小=500 中=500~1500 大型=1500~3000
    MinSpareThreads      25 #推荐设置:小=默认 中=50~100 大=100~200
    MaxSpareThreads      75 #推荐设置:小=默认 中=80~160 大=200~400 
    ThreadsPerChild      25 #推荐设置:小=默认 中=50~100 大型=100~200
    MaxRequestsPerChild   0 #推荐设置:小=10000 中或大=10000~50000
    (此外,如果MaxClients/ThreadsPerChild大于16,还需额外设置ServerLimit参数,ServerLimit必须大于等于 MaxClients/ThreadsPerChild 的值。)
    </IfModule>

    StartServers 启动Apache时创建的子进程数。

     MinSpareServers 处于空闲状态的最小子进程数。 
     所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。此值不宜过大。

    MaxSpareServers 处于空闲状态的最大子进程数。 

     只有在非常繁忙机器上才需要调整这个参数。此值不宜过大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成MinSpareServers+1。

     MaxClients 允许同时连接的最大请求数量。 

     任何超过MaxClients限制的请求都将进入等待队列,直到达到ListenBacklog指令限制的最大值为止。

     
  • 相关阅读:
    linux shell if 参数
    SHELL输出颜色和闪烁控制
    http层负载均衡之 haproxy实践篇
    linux系统查找大文件脚本
    Nginx的try_files指令和命名location使用实例
    Java SpringMVC实现PC端网页微信扫码支付完整版
    IPTABLES基本例子
    MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)
    spring mvc 集成freemarker模板
    Python—正则表达式
  • 原文地址:https://www.cnblogs.com/lsrd/p/10179307.html
Copyright © 2011-2022 走看看