apache2.2.X主要支持两种工作模式:prefork模式和worker模式
prefork模式:
这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。这种模式是APACHE默认的工作模式,基本上传统的APACHE环境配置软件/面板都采用的这种模式来配置APACHE。这种模式需要的cpu和memory资源也稍多于woker
worker模式:
此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
apache 2.4.x还增加了event模式,这个工作模式和nginx是相似的。但apache2.4要等到centos 7才能使用。
下面是我用一台ECS服务器,512M内存,1M带宽。对APACHE这两种工作模式进行压力测试结果。
具体测试配置,可以参考我前几天写的帖子:http://bbs.aliyun.com/read/167183.html?spm=5176.7189909.3.15.C0KQUa
测试内容:
测试phpinfo生成的页面,考查两种模式下PHP的执行能力。
PHPINFO页面信息
prefork模式:
[attachment=58702]
[attachment=58703]
worker模式:
[attachment=58692]
[attachment=58693]
PTS结果概览
perfork模式
能看到这种模式下有失败的访问量。
[attachment=58704]
worker模式
能看到这种模式下没有失败的访问量。
[attachment=58694]
PTS结果--业务指标
perfork模式
[attachment=58705]
从图中看,约有50个并发访问量时,出现了页面访问错误。
[attachment=58706]
[attachment=58707]
[attachment=58708]
worker模式
[attachment=58695]
[attachment=58696]
[attachment=58697]
[attachment=58698]
PTS结果--ECS指标
perfork模式
[attachment=58699]
[attachment=58700]
[attachment=58701]
worker模式
[attachment=58709]
[attachment=58710]
[attachment=58711]
测试结果
图太多了,希望我没有传错图片。
从上图看到,apache在worker模式下的性能,比perfork模式的性能强劲不少。
但很多工具,都将apache编译为perfork模式,这将导致apache的强劲性能没有体现出来。
如果查看apache是否运行在worker模式下,简单的办法就是:
[root@ ~]# pstree
init─┬─aegis_quartz───4*[{aegis_quartz}]
├─crond
├─dbus-daemon
├─httpd.worker─┬─httpd.worker
│ └─httpd.worker───26*[{httpd.worker}]
从标红的字体处,能看到apache是工作在worker模式下的。
如果配置apache运行在worker模式下?
自己搜索apache worker能找到配置方法。或用我的"Linux管理大师",这个软件默认将apache配置为worker模式。下载地址:
http://bbs.aliyun.com/read/164988.html?spm=5176.7189909.0.0.sIkg0c
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。