• 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 0

        • 这里ServerLimit限制进程数,MaxClients指的是同时最大连接数:ServerLimit = MaxClients / ThreadsPerChild
    4. event MPM在进程和线程的模式上和worker一样,区别在于线程只负责处理请求本身,当请求处理完该线程立即可以回收,http的连接管理交给父进程。
      • worker模式的时候,如果该http连接的keepalive设置的比较长的话,即使该请求已经处理完,也不能回收,因为http连接没中断,这样就需要维持更多的线程。
  • 相关阅读:
    2019-02-08 Python学习之Scrapy的简单了解
    2019-02-07 selenium...
    2019-02-06 单链表的整表创建及增删插
    2019-02-05 Linux的一些常用命令学习2
    2019-02-04 Linux的一些常用命令学习
    2019-02-03 线性表的顺序储存结构C语言实现
    2019-02-03 多进程和多线程的区别【】
    python 多进程
    Tftp文件传输服务器(基于UDP协议)
    多线程实现tcp聊天服务器
  • 原文地址:https://www.cnblogs.com/foxracle/p/3454176.html
Copyright © 2020-2023  润新知