Apache作为最流行的web服务器,有必要深入一下,现在就开始吧,带着很多疑问来写Apache的系列blog:
首先:
Apache的工作模式,是进程模型还是线程模型或者是线程进程混搭模型?
Apache的工作原理是什么?
Apache的最大并发数是多大,在哪里可以配置?
如何对Apache进行调优?
Apache的工作模型
Apache有两种工作模型,一种是基于进程的preforker模型,一种是基于线程和进程混合的Worker模型
1.prefork
prefork采用预派生子进程方式,用单独的子进程来处理 不同的请求,进程之间彼此独立。在make编译和make
install安装后,使用httpd
-l来确定当前使用的MPM是prefork.c。
查看httpd-mpm.conf配置文件,里面包含如下默认的配置段:
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
prefork
控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两
个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式
可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个
值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为
MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自
动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:
1、可防止意外的内存泄
漏。
2、在服务器负载下降的时侯会自动减少子进程数。
因此,可根据服务器的负载来调整这个值。MaxClients是这些指令中最为重要的一个,设定的是
Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps
-ef|grep http|wc
-l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以
处理的请求就越多,但Apache默认的限制不能大于256。ServerLimit指令无须重编译Apache就可以加大MaxClients。
<IfModule prefork.c>
ServerLimit 10000
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 10000
MaxRequestsPerChild 0
</IfModule>
2.Worker
相对于prefork,worker全新的支持多线程和多进程混合模型的MPM。由于
使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以
获得基于进程服务器的稳定性。在configure –with-mpm=worker后,进行make编译、make
install安装。在缺省生成的httpd-mpm.conf中有以下默认配置段:
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Worker
由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,
为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients
设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
MinSpareThreads和
MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。
ThreadsPerChild是worker
MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用
ThreadLimit指令,它的最大缺省值是20000。Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild
值决定的,应该大于等于MaxClients。
如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时
也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以
ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则
Apache将会自动调节到一个相应值。
<IfModule worker.c>
ServerLimit 25
ThreadLimit 200
StartServers 3
MaxClients 2000
MinSpareThreads 50
MaxSpareThreads 200
ThreadsPerChild 100
MaxRequestsPerChild 0
</IfModule>
3.两种工作模型的性能对比
分享到:
相关推荐
Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50 000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。, 本书主要分为4个部分...
BeamApache Beam是用于定义批处理和流数据并行处理流水线的统一模型,以及一组用于构建管道的特定于语言的SDK,用于在分布式处理后端执行它们的Runners,包括Apache Apex,Apache Flink,Apache Spark和Google Cloud...
Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。 本书主要分为4个部分...
Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50 000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。 本书主要分为4个...
MapReduce编程模型篇第3章 MapReduce编程模型3.1 MapReduce编程模型概述3.1.1 MapReduce编程接口体系结构3.1.2 新旧MapReduce API比较3.2 MapReduce API基本概念3.2.1 序列化3.2.2 Reporter参数3.2.3 回调...
本篇顺序:1、Nginx如何抗住的高并发,工作模式是怎样的,利用了哪些技术2、常见的IO模型及异步非阻塞IO的优势3、epoll相对于其他模型为何这么强大Nginx不同于Apache的一点就是,Nginx采用单线程,非阻塞,异步IO的...
在互联网上,你可以找到很多有关适配数据模型设计规则和设计模式的优秀文章,例如:ApacheCassandra数据建模指南和数据建模优秀实践。然而,我们并没有一个详细的操作步骤来指导你对数据进行分析,并适配相应的规则...
包括核心模块如:组织机构,角色用户,菜单及按钮授权,数据权限,系统参数,内容管理,许可证认证,BPM工作流等。无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持多数据源;支持读写分离,...
还有一篇博客文章,详细介绍。动机:大规模演示物联网场景您想看到一个大规模的物联网示例吗? 不仅是100或1000个设备都在生成数据,而且是一个真正可扩展的演示,它每秒从数万个设备中发送数百万条消息? 这是...
Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50 000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。 本书主要分为4个...
, 《LoadRunner性能测试巧匠训练营》分为四大部分:, 第一篇 初入职场:系统、全面、细致地讲解了刚刚步入性能测试领域的小白学习性能测试需要掌握的方法和知识点,包括性能测试的术语、指标、分类、模型,...
快手从模型规范开始的数据治理实践 第12章元数据管理-DAMA-DMBOK:数据管理知识体系 权限管理设计方案 数据安全模板-访问权限梳理表 数据治理服务解决方案 数据治理及数据资产化创新实践-京东 万振龙:数据治理与...
第三篇全面介绍如何参与开源社区的工作,引导大家融入开源社区从而探析各个开源软件的技术精髓,深入认识开源文化,提升个人在技术、交流等各方面的能力,希望能帮助提高国内开发人员的整体水平——这对于中国软件...
我强烈建议阅读原始论文,然后阅读前两篇(转录和生成)的论文。 是最后一块,也是我们如何合成变压器模型的 MIDI 输出,使其听起来像一架原声钢琴。 为了将它们联系在一起,本文展示了我遵循的整体架构。 这是一个...
使用GWT,开发人员可以利用熟知的Java技术设计用户界面(UI)和事件模型,而GWT会完成使代码对所有主流浏览器友好的繁重工作。这是本系列的第一篇文章,介绍GWT基础知识,包括GWT是怎样使您创建一个...