zoukankan      html  css  js  c++  java
  • Apache工作模式

    1.prefork.c模块(一个非线程型的、预派生的MPM)
    2.worker.c模块(支持混合的多线程多进程的多路处理模块)
    Apache配置文件路径是/etc/httpd/conf/,在这个路径下面vi httpd.conf,将以下内容添加到httpd.conf文件的最后,保存并退出,然后重启Apache服务(service httpd restart),最后在浏览器中输入192.168.0.99/server-status

    <Location /server-status>
    Order allow,deny
    Deny from nothing
    Allow from all
    SetHandler server-status
    </Location>
    ExtendedStatus On
    <Location /server-info>  # server-info是配置apache监听的
    SetHandler server-info
    Order allow,deny
    Deny from nothing
    Allow from all
    </Location>

    prefork MPM使用多个子进程,每个子进程只有一个线程,每个进程在某个确定的时间只能维持一个连接,在大多数平台上,Prefork MPM比Worker MPM效率高,但要消耗更多的内存,prefork的无线程设计在某些情况下比worker更有优势:他能够使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,他也更容易调试一些,模式是以进程为主的模式,速度比较快,比较稳定,但不支持大并发,起太多进程操作系统接受不了,造成了prefork模式稳定,高效,无法支持大并发,prefork工作模式适用于石油系统,没有什么并发

    Apache工作模式之prefork模式
    ServerLimit 2000
    默认的MaxClient最大是256个线程,假如想配置更大的值,就得加上ServerLimit这个参数,20000是ServerLimit这个参数的最大值,加入需要更大,则必须编译apache,此前都是无需重新编译Apache生效前提:必须放在其他指令的前面
    MaxClients
    限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认是256,任何超过MaxClients限制的请求都将进入等候队列,一旦一个连接被释放,队列中的请求将得到服务,要增大这个值,必须同时增大ServerLimit
    StartServers 5
    指定服务器启动时建立的子进程数量,prefork默认为5
    MinSpareServers 5
    指定空闲子进程的最小数量,默认为5,假如当前空闲子进程数少于MinSpareServers,那么Apache将以最大一秒一个的速度产生新的子进程,此参数不要设的太大
    MaxSpareServers 10
    配置空闲子进程的最大数量,默认为10,加入当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程,此参数不要设的太大,假如将该指令的值配置的比MinSpareServers小,Apache将会自动将其修改成MinSpareServers+1
    MaxRequestsPerChild 10000
    每个子进程再其存活期内允许伺服的最大请求数量,默认为10000,到达MaxRequestsPerChild的限制后,子进程将会结束,假如MaxRequestsPerChild为0,子进程将永远不会结束

    将MaxRequestsPerChild配置成非零值有两个好处:
    a.能够防止(偶然的)内存泄漏无限进行,从而耗尽内存
    b.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量

    将以下内容添加到httpd.conf文件的最后,保存并退出,然后重启Apache服务(service httpd restart),最后在浏览器中刷新192.168.0.99/server-status这个网页
    <IfModule mpm_prefork_module>
    StartServers 5   # Apache启动时默认初始化5个进程
    MinSpareServers 5   # 最小空闲进程
    MaxSpareServers 10   # 最大空闲进程
    MaxClients 150   # 客户端最大接入请求的数量
    MaxRequestsPerChild 0   # 生命周期,0表示永远不结束
    </IfModule>

    Apache工作模式之worker模式
    worker MPM使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的http服务器上,worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多,但worker MPM也有不完善的地方,假如一个线程崩溃,整个进程就会连同其任何线程一起"死掉",由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"

    worker模式是一种多进程多线程的工作模式,它会起多个进程,但是每个进程下面有多个线程,线程很多,进程很少,worker工作模式支持的并发会大一些,在互联网使用大并发基本都使用worker模式
    这两种工作模式都是预派生,预派生会事先把进程和线程准备好
    在性能测试过程中一般把最大和最小的创建成一致,减少大量的创建和销毁,减少资源的浪费

    ServerLimit 50
    服务器允许配置的进程数上限,值必须大于等于MaxClients/ThreadsPerChild,这个指令和ThreadLimit结合使用配置了MaxClients最大允许配置的数值
    ThreadLimit 200
    每个子进程可配置的线程数上限,这个指令配置了每个子进程可配置的线程数ThreadsPerChild上限,该值应该跟ThreadsPerChild可能达到的最大值保持一致,ThreadLimit >=ThreadsPerChild
    StartServers 5
    服务器启动时建立的子进程数
    MinSpareThreads 25
    最小空闲线程数,这个MPM将基于整个服务器监控空闲线程数,假如服务器中总的空闲线程数太少,子进程将产生新的空闲线程
    MaxSpareThreads 500
    最大空闲线程数,这个MPM将基于整个服务器监控空闲线程数,假如服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程
    MaxClients 5000
    允许同时伺服的最大接入请求数量(最大线程数量),任何超过MaxClients限制的请求都将进入等候队列,因此要增加MaxClients的时候,必须同时增加ServerLimit的值
    ThreadsPerChild 100
    每个子进程建立的常驻的执行线程数,子进程在启动时建立这些线程后就不再建立新的线程了
    MaxRequestsPerChild 0
    配置每个子进程在其生存期间允许伺服的最大请求数量,到达MaxRequestsPerChild的限制后,子进程将会结束,假如MaxRequestsPerChild为"0",子进程将永远不会结束

    安装worker模式
    第一步:
    进入/usr/sbin目录,cd /usr/sbin
    第二步:
    将当前的prefork模式启动文件改名,mv httpd httpd.prefork
    第三步:
    将worker模式的启动文件改名,mv httpd.worker httpd,重启httpd会报错,yum install php-zts,重启Apache服务,/etc/init.d/httpd restart就会成功了,刷新页面看变化
    第四步:
    修改配置文件 vi /etc/httpd/conf/httpd.conf
    找到里面的如下内容,可适当修改负载等参数:
    <IfModule worker.c>
    StartServers 2
    MaxClients 150
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadsPerChild 25//每个进程下的常驻线程数
    MaxRequestsPerChild 0
    </IfModule>
    不管MinSpareThreads和MaxSpareThreads怎么变都是进程+1,-1的过程,优先满足MinSpareThreads,MinSpareThreads满足后再满足MaxSpareThreads,如果MaxSpareThreads小于等于MinSpareThreads,MaxSpareThreads失效

    把之前的prefork模式注释掉,如上图
    第五步:
    重新启动服务,/etc/init.d/httpd restart

    -enable-file-cache提供文件描述符缓存支持,从而提升Apache性能

  • 相关阅读:
    LeetCode 第 193 场周赛
    LeetCode 每日一题 15. 三数之和
    LeetCode 每日一题 739. 每日温度
    [转]邹承鲁院士写他是如何读文献
    LeetCode 每日一题 面试题46. 把数字翻译成字符串
    LeetCode 每日一题 990. 等式方程的可满足性
    传说中编程界的龙书、虎书、鲸书、魔法书…… 指的都是哪些?
    LeetCode 每日一题 238. 除自身以外数组的乘积
    C++ 关键字 explicit
    LeetCode 每日一题 837. 新21点
  • 原文地址:https://www.cnblogs.com/laosun0204/p/14504287.html
Copyright © 2011-2022 走看看