改善 Apache + PHP 效能的一些想法…

雖然現在已經是 Rails 或是 Python 的時代了(以上兩個語言隨便都可以跑出 1000 req/s 的成績,反觀 PHP 在 production 最多也才 200 req/s)。不過 PHP 畢竟還是一個大量應用在 Web 環境的語言,尤其是 WordPress 也還是用 PHP……

  1. 使用 fastcgi mode + Apache Worker 或是 Thread MPM
    PHP 本身雖然是 Thread safe 的,但是PHP的 Module 很多不是(如 mysql module),所以如果要用 Apache PHP Module的話,只能用 prefork MPM。而 prefork 一隻 httpd 動輒 200MB,有時候還高達 2GB,造成效能不彰。另外一個重點是 fastcgi 會自己重跑,可以避免 memory leak 問題。
  2. 上 OP Code Cache
    例如 APC 之類的OP Code Cache可以避免每次執行的時候,PHP都去 compile 一次原始程式碼。
  3. 避免大量的 require、include,或是把需要 require 與 include 的檔案都放在同一個目錄下
    因為 realpath() 很吃資源…也可以考慮加大 realpath cache
  4. Cache
    考慮把資料庫輸出 cache,或甚至 cache 整個 HTML。
  5. 把 static file 與動態 file 分開
    講到爛的東西了。

另外PHP是個不適合OO的語言,不要期待使用OO的PHP效能會好……