:: Sola & Luna :: Album of the Shining Days

輝きが溢れる日々を、ともに、創る~ShyujikouとLovetwomixのブログ・音楽クリエーターユニット「連鎖調律」公式サイト~


MENU => PROFILES | FOCUS LISTS | MUSIC WORKS | CONTACT

Click to view all posts by Shyujikou

[工作笔记]优化PHP平台网站性能别忘了PHP编译缓存工具

Tags: , , ,
Posted in Comment | 评星品辰,Technology | 技术 by Shyujikou on September 4th, 2007

工作上遇到了一个比较大的问题,我们运营的网站由于从8月底在其它网站投放广告以来,访问量急剧上升,再加上新功能的上线,网站的性能面临着前所未有的压力。从8月27日开始的一周之内,凡高峰时段(9:00-18:00,19:00-21:00)网站的响应十分缓慢,几乎就无法正常访问,导致广告招募会员的效果基本流失。在使用放置在同机房的另外一台服务器测试后,排除了网络因素,通过MRTG的图表来看,很明显高峰时段CPU的占用率一直维持在99.9%,登录到服务器上用TOP命令监测进程,发现几个httpd进程(一般有3~4个进程)一直占用99.9%的CPU资源,居高不下。

网站的硬件架构是两台配置一样的Red Hat服务器,配置为Apache2、PHP5,使用Pulse实现负载均衡,另一台数据库兼NFS共享服务器为MySQL5。既然是httpd占用CPU那么就是Apache或者PHP所造成的了。首先从Apache的设置开始进行优化,涉及超时时间等设定,这里面有一点值得说的,那就是Apache的文档上说Apache2在UNIX平台上运行最好不要使用Threaded MPM(Worker)模式进行工作,以免发生运行不稳定的情况。于是我们尝试将Apache编译为Prefork模式运行,结果发现速度比以前更加慢了……其实道理也很简单,Prefork模式其实是用资源来换取稳定性(每个独立线程都有独立的内存资源,对于PHP应用就比较稳定),在现在CPU资源紧缺的情况下显然是火上浇油。

Apache换回Worker模式之后再考虑其它方面的解决方案。本来是觉得既然服务器已经到负荷极限,那么再添一台WEB服务器也是计划之中的,而且这部分预算也是有的,问题是按俺PL同志的经验来看,这样的负荷不足以让这么好配置的服务器到达极限。之前研究过一个问题,那就是服务器是64位Xeon处理器,而安装的操作系统是32位版本的Red Hat,但是咨询了Red Hat的工程师之后得到的答案是,这样对性能没有影响,只是64位CPU以32位模式运行而已。接下来从PHP上面入手,开发方的PM同志给了一个建议说可以安装eAccelerator试试看。这东西是一个PHP缓存,也就是说将编译好的PHP脚本进行缓存,以节省每次运行的编译过程,提高PHP程序的执行效率。服务器上已经安装过Zend Optimizer的,原本以为那东西也是类似这样的缓存工具,结果后来才发现缓存工具是Zend另外一个产品,收费的,而这个Optimizer只不过是页面压缩输出而已……

于是eAccelerator的安装上面也遇到了一些问题,主要是它跟Zend的兼容问题,如果作为PHP组件安装的话,必须要在Zend前面载入才行(官方文档:http://www.eaccelerator.net/wiki/TroubleShooting)……安装好之后大吃一惊,高峰时CPU占用率维持在70%左右,页面响应速度明显提高了一个等级,某评测网站上说eAccelerator可以让PHP执行效率提高越3~4倍,看上去并不是夸张的说法……

以上仅仅对这次事件的处理进行一个简单的记录,提醒自己和大家在优化PHP平台网站的时候不要忘记还有PHP编译缓存工具的存在。



相关文章 | Related Posts

Leave a Reply