作者MrMarcus (请勿忘记密码)
看板PHP
标题[闲聊] PHP Framework效能问题
时间Thu Apr 24 12:39:52 2008
是说,最近遇到一个状况。我们做了个东西让使用者下载回去使用,
然後使用过程中,每隔10秒钟会做一次回报动作,让我们知道他有在
使用这个东西。回报动作是呼叫Web server上的一个php程式。
开放下载以後,随着使用的人数增加,我们遇到了CPU loading上升
的问题。大约两小时後,主机的CPU loading就持续维持在100%了...
(Xeon 3.06GHz CPU x 2 / 2GB RAM, 记忆体使用量倒是一直算正常)
当时同时使用的人数,粗估大概有五六百人。想像一下这几百人同时
浏览一个网站,然後大家每隔10秒钟就换一页或者reload一次这样.
处理回报资料的php程式是执行在CodeIgniter这个php framework上面。
错估对主机的负荷是我们的问题,不过这程式做的工作老实说并不
繁复,让主机CPU持续满载还是让我吓了一跳。而且我观察到资料库
那台主机的负荷竟然非常低,当Web server持续满载的时候,DB
server负荷却只有不到10%。
这让我直觉问题是出在php这端,而不是程式里面使用过多资料库操作。
是CI有什麽bug吗?还是我们写在CI上面跑的程式有问题?我首先试着
把这个程式的controller直接修改成什麽都不做,结果负荷仍然持续
满载。这表示执行进入CI framework以後,还没执行到我们写的code
之前,就已经把CPU操爆了.
所以问题应该是出在CI上面。我没有办法打开CI的程式码仔细找出
问题点,毕竟当时已经有人在抱怨网站很慢了...而且程式基本上
还是「正确」运作,只是很慢,这种效能问题往往不是单一一个地方
写错所造成的。
紧急状况下,只好立刻动手把这部份程式改写,改成不经过CI。
基本上我是把controller和model里面的各个function复制出来贴
在一起,把资料库操作的部份改成单纯的mysql_xxx(),然後输出
的部份用最单纯的echo()。大概一个多小时修改完,切过去,Web
server的负荷立刻下降到30%左右(DB server的负荷倒是如预期,
没什麽变动)。网站浏览起来也恢复顺畅了。
这次经验让我对php framework的效能产生很大的疑问。平常状况
下确实没什麽差异,但是在这次这种大量负荷的状况下,framework
的效能问题就非常明显了。
注意我是泛指各framework的效能问题。我不打算单独说是CI有问题,
因为在我认知里面,CI已经是php framework里面很轻量的了,
其他framework也许也有同样的问题。
希望藉由这次经验的分享,大家也来说说看这方面的经验吧:)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.237.191