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

[经验分享] apache的多线程多进程的多路处理模块

[复制链接]

尚未签到

发表于 2018-11-27 08:51:39 | 显示全部楼层 |阅读模式
参考如下内容:  Apache MPM worker
  说明
  支持混合的多线程多进程的多路处理模块
  状态
  MPM
  模块名
  mpm_worker_module
  源文件
  worker.c
  概述
  此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
  控制这个MPM的最重要的指令是,控制每个子进程允许建立的线程数的
  ThreadsPerChild
  指令,和控制允许建立的总线程数的
  MaxClients
  指令。

  工作方式
  每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立
  ThreadsPerChild
  数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。
  Apache总是试图维持一个备用(spare)或是空闲的服务线程池。这样,客户端无须等待新线程或新进程的建立即可得到处理。初始化时建立的进程数量由
  StartServers
  指令决定。随后父进程检测所有子进程中空闲线程的总数,并新建或结束子进程使空闲线程的总数维持在
  MinSpareThreads
  和
  MaxSpareThreads
  所指定的范围内。由于这个过程是自动调整的,几乎没有必要修改这些指令的缺省值。可以并行处理的客户端的最大数量取决于
  MaxClients
  指令。活动子进程的最大数量取决于
  MaxClients
  除以
  ThreadsPerChild
  的值。
  有两个指令设置了活动子进程数量和每个子进程中线程数量的硬限制。要想改变这个硬限制必须完全停止服务器然后再启动服务器(直接重启是不行的),
  ServerLimit
  是活动子进程数量的硬限制,它必须大于或等于
  MaxClients
  除以
  ThreadsPerChild
  的值。
  ThreadLimit
  是所有服务线程总数的硬限制,它必须大于或等于
  ThreadsPerChild
  指令。这两个指令必须出现在其他
  worker
  MPM指令的前面。
  在设置的活动子进程数量之外,还可能有额外的子进程处于"正在中止"的状态但是其中至少有一个服务线程仍然在处理客户端请求,直到到达
  MaxClients
  以致结束进程,虽然实际数量会很小。这个行为能够通过以下禁止特别的子进程中止的方法来避免:

  • 将  MaxRequestsPerChild
      设为"0"
  • 将  MaxSpareThreads
      和
      MaxClients
      设为相同的值
  一个典型的针对
  worker
  MPM的配置如下:
  ServerLimit 16
  StartServers 2
  MaxClients 150
  MinSpareThreads 25
  MaxSpareThreads 75
  ThreadsPerChild 25
  在Unix中,为了能够绑定80端口,父进程一般都是以root身份启动,随后,Apache以较低权限的用户建立子进程和线程。
  User和Group
  指令用于设置Apache子进程的权限。虽然子进程必须对其提供的内容拥有读权限,但应该尽可能给予它较少的特权。另外,除非使用了
  suexec
  ,否则,这些指令设置的权限将被CGI脚本所继承。
  参考如上内容(来自http://apache.chinahtml.com/mod/worker.html),可以实现apache混合的多线程多进程的多路处理,重新编译apache2
  ./configure --with-mpm=worker
  make
  make install
  在apache配置文件中加入如下内容
  ServerLimit 16
  StartServers 2
  MaxClients 150
  MinSpareThreads 25
  MaxSpareThreads 75
  ThreadsPerChild 25
  这样就可以了.
  如果您在重新编译时遇到,编译错误
  undefined reference to `ap_thread_stacksize' ...
  请在configure 前先执行 make distclean
  (完)
  本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66496/showart_697141.html


运维网声明 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-640090-1-1.html 上篇帖子: apache访问日志的设置 下篇帖子: IIS与Apache共用80端口三法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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