资源描述:
《《drupal的性能问题——php沉思录之六》》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Drupal的性能问题——PHP沉思录之六Drupal的性能问题PHP沉思录之六此为作者该系列文章的最后一篇,文中冷静地分析了PHP存在的问题,当然这并不会动摇我们认为PHP是一门优秀语言的观点.知其所短,才能更用其所长.一文,左轻侯Drupal是一个基于PHP的开源CMS系统,也是我认为技术上实现得最好的一个PHP应用.Drupal的架构非常优秀,通过微内核+plugin的方式,实现了极佳的扩展性,从而使Drupal远远超出一般的CMS这一范畴.从这个意义上来说,把Drupal称为WebOS似乎更加合适一些.
2、关于Drupal,有太多的话可以说,也许我会在以后的时间里写一篇文章对它进行专门的讨论.但是在本文中,我想讨论的,是Drupal社区中的每一个人都会面对,但不是每一个人都对其有清晰认识的问题,即Drupal的性能问题.因为客户需求,我曾经对Drupal做过比较全面的测试.当时的环境是双服务器(DBsewer+WebSewer),硬件配置都是单CPU+4G.数据库里面有几千条Node记录.用JMeter对各种情况下(开,关各种cache模块,loggeduser/anonvmoususer)不同页面的读取和写入操
3、作都进行过测试.测试的结果可能和很多人印象中不一样.两个主要的结果如下:1.Joggeduser和anonymoususerl~性能差距非常大.同一个页面,loggeduser的RPS(Requestspersecond)一般不超过20,而启用了cache的anonymoususer的RPS在100多,当使用了file.basedcache以后,甚至能超过300.2.数据库压力相对较小.由于Drupal把大量可配置的内容都放在数据库中,因此往往容易产生这样一种印象,即Drupal对数据库要求应该是很高的.但事实
4、上,无论是cache还是非cache模式,DBsewer的压力都相当小(CPU在10%以下),而WebSewer的CPU在80%以上.跟踪所有的dbquery的执行时间后,也证明了这一点(全部dbquery的执行时间只占页面生成时间的一小部分).经过反复的测试和思考,我得出了一些结论.很明显,Drupal在大量loggeduser并发情况下的瓶颈,在于执行Drupal代码的CPU时间,而不是在于数据库或者其他地方.之所以出现这样的情况,和PHP本身的执行机制和Drupal的实现方式有关.Drupal在生成一个非
5、cached的页面时,不管这个页面多么简单,都要执行一个完整的bootstrap过程,即使只启用了最少的模块,这个过程也要调用几十个PHP文件,执行成千上万行PHP代码.而PHP的机制又决定了没有任何PHP代码或者对象能够驻留内存,每次响应请求都必须执行完整的初始化工作.而anonymoususer之所以快,是因为Drupal在执行cachedpage的时候,不会执行完整的bootstrap过程,它先检查是否cachedpage,是的话就读取缓存,然后结束工作.这样当然就快了.以这个结论为前提,可以解释一些事情
6、:1.为什么Drupal的性能在各种环境下相差并不多.无论是双服务器,单服务器,甚至内存非常小的虚拟机,loggeduser的RPS值往往总是在10-20之间.数据库里面有几百条,或者几十万条记录,影响也不大.因为瓶颈并不在于DB或者内存,而是在于执行代码的过程.2.为什么使用APC/XCache这样的代码优化程序,能够得到极大的性能提升.在我自己的虚拟机环境上,RPS从3-4提升到了12.因为它提升的是PHP代码的执行时间.从这个结论出发,列出一些对优化Drupal的loggeduser性能有明显作用和没有明
7、显作用的措施:没有明显作用的:1.加内存.在并发数只有10+的时候,即使每个请求占20M内存,也只有200M+内存而已.2.DBsewer~1:1Websewer分开,或者增强DBsewer的配置.一台中等性能的mysql服务器,应付200-300的并发是很轻松的事情,在并发数只有10+的时候,dbsewer实际上是很空闲的.3.基础软件的优化,例如从Windows转移到Linux,从apache转移到Lighttpd,从MySQL迁移到其他数据库,除了从Windows转移到Linux会有比较明显的提升以外(因
8、20081]91>,,】√U①为PHP在Linux上的效率比在Windows上要好),其它的措施可能会快一些,但不会有大幅度的提高,因为瓶颈不在那里.有明显作用的:1.使用APC/XCache这样的代码优化程序,速度会有几倍的提升.估计大家都已经这样做过了.2.增加webserver的CPU数量.双核的肯定比单核的快,4个CPU肯定比2个CPU快得多.3.使用多webserver