DreamHost 的 CPU 限制
剛剛看到 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 還沒搬家前,就是以這種方式在跑。
反過來看當年的 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… *無言*