Apache的多路处理模块MPM:Prefork Worker Event

  1. 如何确认当前apache使用哪一种模式
    • 经过/etc/init.d/httpd中的来确认系统apache的运行脚本路径
      • apachectl=/usr/sbin/apachectl
        httpd=${HTTPD-/usr/sbin/httpd}
        prog=httpd
        pidfile=${PIDFILE-/var/run/httpd.pid}
        lockfile=${LOCKFILE-/var/lock/subsys/httpd}
    • /usr/sbin/httpd -l
    • /usr/sbin/httpd -V | grep MPM
  2. prefork MPM使用多个子进程,每一个子进程一个线程的方式处理请求,每一个进程一个时间只处理一个请求。
    • 快,由于它每一个子进程没有管理多个子线程的负担
    • 稳定,由于某个请求出问题,不会影响到其余进程,由于他们拥有独立的地址空间,变量和内存。
    • 可用于非线程安全的第三方模块,好比可使用非线程安全的mod_php模块,但在大量并发的状况下,会迅速大量消耗资源
    • 调优的关键参数,MaxClients和ServerLimit。MaxClients小于256的时候,ServerLimit不起做用,其默认值是256。通常这两个值设置成同样。MaxClients决定你的最大并发数。
      • MaxClients = (Total Memory – Critical Services Memory(OS)) / Size Per Apache process(about 30M)
    • 计算现有系统的每一个apache进程的内存使用量
      • ps aux | grep httpd | grep -v pts | awk '{ tot += $6; procs += 1; print $1,$2,$6,$11 } END { print "TOTAL: ",tot,"/",procs,"=",tot/procs }'
    • 估算MaxConnectionsPerChild公式
      • total amount of daily requests  / total number of daily processes
  3. worker MPM使用多个子进程,每一个子进程多个线程的混合方式处理请求,每一个线程一个时间只处理一个请求。对资源比较友好,适用于高并发状况
    • 经常使用于高并发
    • 典型配置:
      • ServerLimit 40
        StartServers 2
        MaxClients 1000
        MinSpareThreads 25
        MaxSpareThreads 75
        ThreadsPerChild 25
        MaxRequestsPerChild 0php

      • 这里ServerLimit限制进程数,MaxClients指的是同时最大链接数:ServerLimit = MaxClients / ThreadsPerChild
  4. event MPM在进程和线程的模式上和worker同样,区别在于线程只负责处理请求自己,当请求处理完该线程当即能够回收,http的链接管理交给父进程。
    • worker模式的时候,若是该http链接的keepalive设置的比较长的话,即便该请求已经处理完,也不能回收,由于http链接没中断,这样就须要维持更多的线程。
相关文章
相关标签/搜索