• Apache 工作模式配置优化


    Apahce 工作模式配置

    1、查看当前MPM工作模式

    /usr/local/apache2/bin/apachectl -V
    
    Server version: Apache/2.4.27 (Unix)
    Server built:   Dec 24 2017 07:11:28
    Server's Module Magic Number: 20120211:68
    Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
    Compiled using: APR 1.6.3, APR-UTIL 1.6.1
    Architecture:   32-bit
    # MPM模式
    Server MPM:     event
      threaded:     yes (fixed thread count)
        forked:     yes (variable process count)
    Server compiled with....
     -D APR_HAS_SENDFILE
     -D APR_HAS_MMAP
     -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
     -D APR_USE_SYSVSEM_SERIALIZE
     -D APR_USE_PTHREAD_SERIALIZE
     -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
     -D APR_HAS_OTHER_CHILD
     -D AP_HAVE_RELIABLE_PIPED_LOGS
     -D DYNAMIC_MODULE_LIMIT=256
     -D HTTPD_ROOT="/usr/local/apache2"
     -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
     -D DEFAULT_PIDLOG="logs/httpd.pid"
     -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
     -D DEFAULT_ERRORLOG="logs/error_log"
     -D AP_TYPES_CONFIG_FILE="conf/mime.types"
     -D SERVER_CONFIG_FILE="conf/httpd.conf"
    查看MPM模式
    /usr/local/apache2/bin/apachectl -l
    
    Compiled in modules:
      core.c
      mod_so.c
      http_core.c
      event.c
    查看调用模块

    2、编辑prefork需要在主配置文件下解注释

    vim /usr/local/apache2/conf/httpd.conf

    Include conf/extra/httpd-mpm.conf
    

    3、在httpd-mpm.conf下进行文件配置

    /usr/local/apache2/conf/extra/httpd-mpm.conf

     Apahce Prefork模式

    使用参数

    ServerLimit: 再Apache2.0后 可设置超过256线程限制,要大于 MaxClients。
    
    StartServers:开启的子进程数量,prefork默认为5。
     
    MinSpareServers: 指定空闲子进程的最小数量,默认为5。Apache 每大约1秒的速度新建进程
     
    MaxSpareServers:最大空闲空闲进程数量,大于数量的会一直杀,直到指定最小空闲数。 空闲进程多余该进程数会自动释放资源。
     
    ServerLimit:修改apache最大并发连接数的参数设置,要将它放在MaxRequestWorkers前面,并且它的值也一定要大
     
    MaxClients:最大并发客户端链接数。再Aapache1.3种最大只能设置256,但在Apache2.0中,可以通过在配置开头中增加ServerLimit项目来突破256限制,此时必须  ServerLimit ≤ MaxClients ≤ 20000
     
    MaxRequestsPerChild:限制子进程请求响应个数,多少请求后派生新的子进程、0为永远。 
    
    MaxRequestsPerChild:不要设置为0,设置为非0,可以保护Apache进程免遭内存泄漏
     
    MaxConnectionsPerChild:每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达
    
    MaxRequestWorkers:最大同时处理请求的进程数量,也是最大的同时连接数,表示了apache的最大请求并发能力
    

    使用案例

    # mpm_perfork模块
    <IfModule mpm_prefork_module>
        StartServers          5     # 推荐设置:小=默认 中=20~50 大=50~100
        MinSpareServers       5     # 推荐设置:与StartServers保持一致
        MaxSpareServers       10    # 推荐设置:小=20 中=30~80 大=80~120 
        ServerLimit           150   # 推荐设置:与MaxRequestWorkers保持一致               
        MaxClients           150    # 推荐设置:小=500 中=500~1500 大型=1500~3000
        MaxRequestsPerChild   0     # 推荐设置:小=10000 中或大=10000~500000
    </IfModule>
    配置文件

    其他说明

    在Unix系统中,很多服务(Service)的守护进程(Daemon)在启动时会创建一个进程以准备应答可能的连接请求,服务即进入了端口监听状态,当一个来自客户端(Client)的请求被发送至服务所监听的端口时,该服务进程即会处理该请求,在处理过程中,该进程处于独占状态,也就是说如果此时有其他请求到达,这些请求只能“排队”等待当前请求处理完成且服务进程释放。这样就会导致越来越多的请求处于队列等待状态,实际表现就是该服务处理能力非常低下。Apache使用Prefork模式很好的解决了这一问题。
    使用环境
    将MaxRequestsPerChild设置成非零值有两个好处:
    1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
    2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
    

     Apahce Worker模式

     使用参数

    StartServers:初始数量的服务器进程开始。
    
    MinSpareThreads:最小数量的工作线程,保存备用。
    
    MaxSpareThreads:最大数量的工作线程,保存备用。
    
    ThreadsPerChild:固定数量的工作线程在每个服务器进程。
    
    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
    </IfModule>
    配置文件

    其他说明

    注:如果MaxClients/ThreadsPerChild大于16,还需额外设置ServerLimit参数,ServerLimit必须大于等于 MaxClients/ThreadsPerChild 的值。
    

     Apahce mpm_winnt模式

    使用参数

    ThreadsPerChild:每个子进程的最大并发线程数。
    
    MaxRequestsPerChild:每个子进程允许处理的请求总数。

    使用案例

    # 使用mpm_winnt_module模式
    <IfModule mpm_winnt_module>
        ThreadsPerChild      150    # 推荐设置:小型网站=1000 中型网站=1000~2000 大型网站=2000~3500
        MaxRequestsPerChild    0    # 推荐设置:小=10000 中或大=20000~100000
    </IfModule>
    配置文件

    其他说明

    注:由于mpm_winnt模块只会创建1个子进程,因此这里对单个子进程的参数设置就相当于对整个Apache的参数设置。
    
    注:mpm_winnt模块是专门针对Windows操作系统而优化设计的MPM模块。它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。
    
  • 相关阅读:
    rabbitMQ学习笔记(二) 简单的发送与接收消息 HelloWorld
    rabbitMQ学习笔记(一)Windows 与Linux下rabbitMQ的安装
    数据库必知必会操作手册—创建高级联结
    面试题 16.11. 跳水板(数学法)
    面试题 08.06. 汉诺塔问题(分治递归)
    剑指 Offer 32
    剑指 Offer 32
    剑指 Offer 53
    剑指 Offer 30. 包含min函数的栈(辅助栈)
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8377124.html
Copyright © 2020-2023  润新知