设为首页 收藏本站
查看: 580|回复: 0

[经验分享] Apache优化配置——工作模式

[复制链接]

尚未签到

发表于 2018-11-18 11:49:25 | 显示全部楼层 |阅读模式
  Apache所运行的硬件环境都是对性能影响最大的因素

  各个硬件指标中,对性能影响最大的是内存,其次是硬盘的速度
  ●Apache的工作模式
  1、prefork模式(一个 非线程型的)
  ⑴、主要工作方式:当Apache服务器启动后,mpm_prefork模块会预先创建多个子进程(默认为5个),每个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork模块再将请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。如果当前的请求数将超过预先创建的子进程数时,mpm_prefork模块就会创建新的子进程来处理额外的请求。Apache总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求,这样客户端的请求就不需要在接收后等候子进程的产生。
  ⑵prefork在效率上要比worker要高,但是内存使用大多不擅长处理高并发的场景
  ⑶Apache在prefork工作模式下影响性能的重要参数说明:
  #prefork MPM
  
          StartServers    5        #Apache启动时默认开始的子进程数

          MinSpareServers    5        #最小的闲置子进程数

          MaxSpareServers    10        #最大的闲置子进程数,

          MaxRequestWorkers    250        #MaxRequestWorkers设置了允许同时最大接入的请求数量,任何超过MaxRequestWorkers限制的请求将进入等候队列
          MaxConnectionsPerChild    500        #设置的是每个子进程可处理的请求数。每个进程在处理了“MaxConnectionsPerChild”请求后将自动销毁。0意味着无限,即子进程永不销毁。设置为1时可防止意外的内存泄漏。设置为2时表示在服务器负载下降的时候会自动减少子进程数。可根据服务器的负载来调整此值

  ★注:
  ①MaxRequestWorkers是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。如果请求总数已经达到这个值(通过ps -ef | grep http | wc -l来确认)那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而http访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,建议将初始值设为以MB为单位的最大物理内存/2,然后根据负载情况进行动态调整。
  ②prefork控制进程在最初建立“StartServers”子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个......如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止,这种模式可以不必再请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会kill掉一些多余的进程,这个值不要设的过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
  ServerLimit和MaxClients(MaxRequestWorkers)的区别:在Apache时代,控制最大进程数只有MaxClients这个参数,并且这个参数最大值为256,并且是写死了的,试图设置为超过256是无效的,这是由于Apache1时代的服务器硬件是限制的。但是Apache2时代由于服务器硬件的升级,硬件已经不再是限制,所以ServerLimit这个参数来控制最大进程数,ServerLimit值>=MaxClient值才有效。ServerLimit要放在MaxClients之前,值不要小于Maxclients。
  查看Apache加载的模块:apachectl -t -D DUMP_MODULES 或 apachectl -M 或 apachectl -l
      查看Apache的工作模式:httpd -v 或 httpd -l

  修改prefork参数和启动prefork模式
     vi /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf

      vi /usr/local/http-2.4.23/conf/httpd.conf 添加两行:LoadModule mpm_prefork_module/mod_mpm_prefork.so 和 Include conf/extra/httpd-mpm.conf
      重启httpd服务

  2、Worker模式(多线程多进程)
  ⑴与prefork的比较:prefork速度要稍高于worker,然而它需要的CPU和memory资源也稍多于worker
  ⑵Apache在worker工作模式下影响性能的重要参数说明
  #worker MPM
  
      StartServers    3        #Apache启动时默认开始的子进程数

      MinSpareThreads    75        #最小空闲数量的工作进程

      MaxSpareThreads    250        #最大空闲数量的工作线程
      ThreadPerChild    25        #每个子进程产生的线程数量

      MaxRequestWorkers    400        #MaxRequestWorkers设置了允许同时最大接入的请求数量任何超过MaxRequestWorkers限制的请求将进入等候队列
      MaxConnectionsPerChild    0        #设置的是每个子进程可处理的请求数每个进程在处理了MaxConnectionsPerChild请求后将自动销毁0意味着无限即子进程永不销毁
  ★注:
  ①Worker由主控制进程生成“StartServers”子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数。而MaxRequestWorkers设置了同时连入的clients最大总数,如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250.这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节
  ② ThreadsPerChild是worker MPM 中与性能相关最密切的指令,ThreadsPerChild的最大缺省值是64,如果负载较大,64位也是不够的,这时要使用ThreadLimit指令,他的最大缺省值是20000
  ③Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxRequestWorkers。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进。默认最大的子进程总数是16加大时也需要显示声明ServerLimit。需要注意的是,如果显示声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxRequestWorkers,而且MaxRequestWorkers必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值
  ④进程与线程的区别(线程是指进程内的一个执行单元,也是进程内的可调度实体)

  a、地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间
  b、资源拥有:进程是资源分配和拥有的单位,同一进程内的线程共享进程的资源
  c、线程是处理器调度的基本单位,但进程不是
  d、二者均可并发执行:进程和线程都是由操作 系统所体会的程序运行的基本单元, 系统利用该基本单元实现系统对应用的并发性
  e、简单来说,就是一个程序至少有一个进程,一个进程至少有一个线程
      线程的划分尺度小于进程,使得多线程程序的并发性高

      进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率

  3、Event模式
  这是Apache最新的工作模式,是worker模式的变种,它把服务进程从连接中分离出来,worker模式不同的是在于它解决了,keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。event模式不能很好的支持https的访问

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636552-1-1.html 上篇帖子: Apache实战优化 下篇帖子: Apache服务搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表