worker的工作原理及配置 
相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。 
在configure -with-mpm=worker后,进行make编译、make install安装。在缺省生成的
httpd.conf中有以下配置段:
StartServers 2 
MaxClients 150 
MinSpareThreads 25 
MaxSpareThreads 75 
ThreadsPerChild 25 
MaxRequestsPerChild 0 
worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。 
MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。 
ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行: 
#define DEFAULT_THREAD_LIMIT 64 
#define MAX_THREAD_LIMIT 20000 
这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,超过系统的处理能力,从而因Apache不起动使系统很不稳定。 
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行: 
#define DEFAULT_SERVER_LIMIT 16 
#define MAX_SERVER_LIMIT 20000 
需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是常用worker配置段: 
StartServers 3 
MaxClients 2000 
ServerLimit 25 
MinSpareThreads 50 
MaxSpareThreads 200 
ThreadLimit 200 
ThreadsPerChild 100 
MaxRequestsPerChild 0 
通过上面的叙述,可以了解到Apache 2.0中prefork和worker这两个重要MPM的工作原理,并可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。

附:以下个人理解,恐怕有误。

StartServers 3   //apache已启动马上创建3个httpd进程(ps aux可以看到)
MaxClients 2000   //同一时间最大接受2000个请求(其实就是2000个线程)
ServerLimit 25 //apache最大能启动25个进程。
MinSpareThreads 50 //apache至少要有50个空闲线程,用来等待接下来的请求,不满则由进程创建线程
MaxSpareThreads 200 //apache最多能有200个线程,超出了200个线程,则杀死多余的线程
ThreadLimit 200 //限制一个进程最多只能创建200个线程
ThreadsPerChild 100 //设定一个进程固定创建100个线程
MaxRequestsPerChild 10000   //设定当一个进程一共接受过10000此请求之后被杀死。以释放内存。

从上面的配置我们可以看出,当apache启动时,启动3个httpd进程,每个进程又生成100个线程,但是超过了最大限定的数字,于是杀死100个线程,也就是一个进程。当某个时候有300个请求,目前只有200个线程,于是父进程再创建2个子进程。等请求处理完毕后,在把闲置释放到只剩下200个以内。

本文转自屌丝逆袭博客51CTO博客,原文链接http://blog.51cto.com/5731674/1678874如需转载请自行联系原作者
_追随我心

apache worker性能调优相关推荐

  1. apache服务器性能不行,Apache服务器性能调优

    文章目录 [隐藏] 工具 Apache mod_status Apache2Buddy 多处理模块 Prefork Worker Event 模块配置 StartServers MinSpareSer ...

  2. apache性能调优

    2019独角兽企业重金招聘Python工程师标准>>> 一.总结前一天的学习 在前两天的学习中我们知道.了解并掌握了Web Server结合App Server实现单向Https的这 ...

  3. 通向架构师的道路(第三天)之apache性能调优

    一.总结前一天的学习 在前两天的学习中我们知道.了解并掌握了Web Server结合App Server实现单向Https的这样的一个架构.这个架构是一个非常基础的J2ee工程上线布署时的一种架构.在 ...

  4. Apache整合Tomcat详解系列(三)Apache性能调优

    一.总结前一天的学习 在前两天的学习中我们知道.了解并掌握了Web Server结合App Server实现单向Https的这样的一个架构.这个架构是一个非常基础的J2ee工程上线布署时的一种架构.在 ...

  5. 第3天. 系统构架师之路之apache性能调优

    一.总结前一天的学习 在前两天的学习中我们知道.了解并掌握了Web Server结合App Server实现单向Https的这样的一个架构.这个架构是一个非常基础的J2ee工程上线布署时的一种架构.在 ...

  6. 第十七章 apache 性能调优

    前言 本文档基于对apache的学习整理而成的笔记.本文档详细的记录了apache各种应用,以及一些个人的理解,如果偏差,请和我联系,以在下一个版本中进行更正.其中大部分文档均来自网络,感谢网络上各位 ...

  7. Apache Kafka / Spark流系统的性能调优

    电信行业的实际案例研究 调试实际的分布式应用程序可能是一项艰巨的任务. 至少在一开始,最常见的Google搜索并没有什么用. 在这篇博客文章中,我将详细介绍如何将Apache Kafka / Spar ...

  8. Apache Spark Jobs 性能调优(二)

    Apache Spark Jobs 性能调优(二) 调试资源分配 调试并发 压缩你的数据结构 数据格式 在这篇文章中,首先完成在 Part I 中提到的一些东西.作者将尽量覆盖到影响 Spark 程序 ...

  9. Apache Spark Jobs 性能调优(一)

    Apache Spark Jobs 性能调优(一) Spark 是如何执行程序的 选择正确的 Operator 什么时候不发生 Shuffle 什么情况下 Shuffle 越多越好 二次排序 结论 当 ...

最新文章

  1. 编写 DockerFile
  2. kubernetes性能测试实践
  3. 和transformjs一起摇摆
  4. 华为算法精英赛(题1:判断输入天数为当年的第几天)
  5. atitit.人脸识别的应用场景and使用最佳实践 java .net php
  6. C语言:简单计算器多次使用代码实现
  7. 微信发朋友圈/评论/点赞/搜索 测试用例点
  8. 2.3安装工业相机SDK及测试
  9. samba服务testparm时提示rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)处理办法
  10. 深度可分离卷积解析 - MobileNetV1
  11. 区块链技术方案研究与分析
  12. 第1天学习打卡(Javaweb 邮件发送:原理、发送简单文本邮件、发送带图片和附件邮件、网站注册发送邮件Servlet实现)
  13. LeetCode 101Pro
  14. 工单流转 指派 php,第三节 工单的指派和处理
  15. Sqldbx连接OracleX64位
  16. Sql Server 2008 通用语法总结
  17. python快速生成文字云_在Python中创建文字云或标签云
  18. 在Mavne环境下,实现struts2和hibernate的NVN关系的注解式开发?
  19. Redis的安装及启动
  20. mcnpf5输出结果_MCNP使用教程

热门文章

  1. 使用Adobe Acrobat为PDF文件添加图章(仅图片)
  2. Linux堆内存管理深入分析 (上半部)【转】
  3. 为linux系统引导和登录提供安全加固
  4. 从 JavaScript 到 TypeScript 6 - Vue 引入 TypeScript
  5. 谈谈目前我对区块链(Blockchain)的认识
  6. C/C++之strcpy功能实现
  7. 修改后的RSA 加密解密 可用于制作liscence
  8. 路由转发采用递归查询
  9. Android应用视觉效果设计技巧
  10. Vue在HTML模板中插入JS数据