作者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