剛剛看到 DreamHost Blog 的 The Truth About Overselling! 這篇,突然想起有些積了很久的東西要寫 :p
主要有兩個要注意的:
- 我們先計算出來:一天有 1440 minutes,如果有兩顆 CPU 就有 2880 CPU minutes,60 CPU mins 佔了 2%+,換句話說,一台雙 CPU 的機器只夠給五十個用滿 2%+ 的客戶用。
- DreamHost 提供了兩種模式跑 PHP:CGI mode (可以跑 PHP4 或 PHP5) 或 mod_php4,前者是預設值,跑 PHP4。
在 CGI mode 下會以 suexec 轉到 user 的身份跑,當然比較安全:所有的檔案權限都可以設定為 600,但是比較慢:因為要先 fork()
再 execl()
到 suexec,再 execl()
到 php.cgi。
而 mod_php4 當然就快多了,少了 fork()
+ execl()
+ execl()
,但 PHP 就是以 apache 的身份在跑,CPU resource 不會掛在 user 帳上,只要不要吃的太兇,其實都不太管。這時 PHP 安全上的問題則是透過 PHP 裡設定 safe_mode,在這個模式下無法透過 fopen()
開啟目錄外的檔案或 symbolic link,以及種種限制。
回過頭來說 Blog Software 以及我對於 Lifetype 開發者心態不以為然。
WordPress 在發展時就都有考慮到 safe_mode 的問題,所以在 DreamHost 上可以直接使用 mod_php4。另外一方面,WordPress 在發展新功能的同時,也在控制 CPU resource 與 MySQL resource 的消耗量。在 blog.gslin.org 與 gslin.org 還沒搬家前,就是以這種方式在跑。(在更早之前我也跑過 php.cgi 的模式,後來收到通知 CPU 超量的信,就改到 mod_php4,一直到四月底搬家)
反過來看當年的 pLog (現在叫 Lifetype),這是 草蝦 2005/06 時裝好 pLog 1.0 後覺得很慢,拿出工具追蹤所發現的紀錄:
03:29 <@Ben_> 救命喔...讀取首頁就要用到 272 個 php 檔案...
到了 2006/02/19,DreamHost Sucks! 我的惡夢! 這篇最後面提到:
PS 2:我的 CPU Minuts 是多少? 195 Minutes 而已啦!他們規定只能用 60 Minutes。
用了整台主機 6%+ 的 CPU resource 還可以大喊人家爛,而且是自己在維護的 Lifetype... *無言*
Hi gslin:
這已經是你第二次沒搞清楚事情的真相就在隨便批評了!
在那之後,我大概花了兩個禮拜來測試,那幾天大概都是 180 - 200 cpu minutes。(我也請 Dreamhost 的管理者允許這樣的測試,也跟他們說如果覺得 Server 不穩,隨時可以先暫停我的服務)
這是的結果中,以平均 180 cpu minutes 為例,大概有平均 155 cpu minutes 來自 mediawiki,而 SMF 佔了 15 cpu minutes, 而 lifetype 佔了 10 cpu minutes (因為最少人看 Development Journal ....)
資料隨著時間過去已經不在了,所以我無法提出證明。但是這是我測試的結果就是了。
我不知的這樣的說法你滿不滿意了。
建議你,下次要批評前,先花一下時間查證吧。
Mark
我雖然對閣下當強盜喊殺人的事情不滿,不過我還沒有小人到認為你會信口開河。
第一次 2005/01/29 我罵 pLog 自己關門起來幹,我沒有搞不清楚那件事情的真相,我從幹剿的時候就已經知道當時閣下是故意關起門來,你認為的理由我認為不是理由。我幹剿的文章都還在:http://gslin.org/2005/01/29/447/。
第二次 2006/05/20 這次我搞錯對象,把 MediaWiki 當成 Lifetype。早上十一點多的時候 pesty 告訴我時,我先用 del 劃掉。
我本來是要寫一篇對於吃掉 6.7% CPU resource 的強盜跑出來喊殺人的行為不滿的文章。也打算寫一篇對明明是個 PHP Developer,知道有 mod_php4 卻硬幹說 php.cgi 會吃光資源很不以為然的文章。
錯就錯在我把 MediaWiki 與 Lifetype 搞在一起,文章的力道就已經沒了。
我也不知該怎麼說了。後續的發展是,我把 php cgi 改成 mod_php 在 run並作測試,而且寫信詢問 dreamhost 管理者,如果我將 php cgi 改成 mod_php 對改善 CPU loading 是否有幫助。他的回答是,只要我敢再啟用 mediawiki 就永久停用我的帳號。
另外,我也測過啟用 memcached來減少 Mediawiki 對 DB 的存取,看能不能減少 Loading ... 問題是,第二天後 CPU minutes 一樣飆高到 180 cpu minutes 以上。 :(
所以之後我就把 mediawiki 關了,開始尋找 Hosting Service Provider 來贊助 LifeType 的 Hosting。
當然也就沒有再超過 30 cpu minutes 了,大約是維持在 20-25 cpu minutes 上下。
我並沒在跟你辯解 LifeType 的 performance 有多好。因為程式的寫法,所以 LifeType 在 loading 時會讀取很多的 scripts, 這是不爭的事實。這是也是 1.1 我們在嘗試改善的方向。
BTW, SVN 的 checkout 方式,也在 wiki 上寫了,如果還不過清楚,請讓我知道,我會在補強。謝謝!
Mark
不好意思上面的大大,借偛話一下
現在DH上好像不允許用mod_php模式了
導致我每天晚上都睡不大安穩等著過載通知...
我已經改由crontab去產生大部分的頁面資訊了
average
0.048 seconds
但是
count
201263