為PHP應用提速、提速、再提速!,第 1 部分: 使用操作碼緩存軟件提升性能和吞吐量
在很短的時間內,PHP成為了一種非常流行的開發 Web 應用程序的程序設計語言。對初學者來說,PHP易於安裝和學習。對於有經驗的開發人員而言,PHP(從V5開始)提供了強大的面向對象特性。PHP開發人員擁有龐大的群體,大量的開源及商業庫和工具擴展了該核心語言的功能。PHP能迅速產生可視化結果,因此備受眾人推崇。
與其他開發Web應用程序的腳本語言(包括Perl、Python和Ruby)相似,每次HTTP請求調用時,PHP代碼都會被解析和翻譯為操作碼(PHP引擎直接執行的原語指令 —— 類似於匯編語言)再執行。在要求很低或可忽略的情況下,服務器看上去能立即執行這個復雜的解釋過程。但是一旦處理的頁面增加,解釋 —— 從本質上說,重復工作 —— 就會對服務器造成很大的負擔。在某些情況下,“編譯”PHP代碼的時間會遠遠超過執行該代碼所需的時間。因此,當需求增加時,您常常會自食其果,因為處理這些不斷解釋和動態生成的頁面需要消耗更多的系統資源。
若您對處理器和 RAM 的預算沒有限制,那麼就大可不必通過優化應用棧(硬件、操作系統、數據庫、Web 服務器和 PHP 代碼)來保證站點的可響應性。然而,由於資金通常都是最缺乏的資源,所以改善性能是必不可少的。調優意味著對系統增加內存、修改操作系統參數、加速 Web 或數據庫服務器、提高代碼效率或者這其中的一些組合。每一項都有其各自的作用。
不要浪費周期 —— 重復使用
節約 CPU 周期的另一種方法是減少運行 PHP 應用程序所需的重復工作。當然,沒有必要每次都把同樣的 PHP 代碼翻譯一遍。PHP 代碼被翻譯成操作碼後,可以把它保存起來並重復使用 —— 直到原始代碼被修改。確實,緩存 —— 用於保存和重用 PHP 操作碼 —— 是幾種 PHP 加速器內部的機制,包括開源 Alternative PHP Cache (APC)、支持 PHP 的 Turck MMCache、XCache、eAccelerator 和商業 Zend Platform。後三類加速器能夠緩存和優化字節碼,這為系統提供了更多的速度提升。
這個月,我將探究如何安裝、部署和配置 XCache。XCache 相對較新,但是很多站點使用它的效果都很好。此外,XCache 易於構建、安裝和配置,因為它是做為 PHP 擴展實現的。不需對 Apache 和 PHP 進行重編譯。
本文基於 XCache V1.2.0。它可為 PHP V4.3.11 至 V4.4.4、PHP V5.1.x 至 V5.2.x 以及 PHP V6 的早期版本提供可靠支持(XCache 並不支持 PHP V5.0.x)。XCache 兼容 mod_php 和 FastCGI 但並不支持 Common Gateway Interface (CGI) 和命令行 PHP 解釋器。XCache 源代碼能構建在許多系統上,包括 FreeBSD、Sun Solaris、Linux® 和這裡所示的 Mac OS X。使用 Cygwin UNIX® 仿真環境或 Visual C,能在 Microsoft® Windows® 上構建 XCache。還可以為 Cygwin 或原生 Win32 構建 XCache。後者與 PHP 的官方 Win32 版本兼容。
本文的演示基於 Apache V2.2.3、PHP V5.2.0、XCache V1.2.0(2006 年 10 月發布)和 Mac OS X V10.4.8 Tiger 上的 Xcode V2.4.1。硬件平台為配有 2-GHz Intel® Core Duo 處理器和 2 GB RAM 的 Apple MacBook。
構建 XCache 的基本步驟
在開始之前,首先確保 PHP 正常安裝並核實 phpize 是否位於 shell 的 PATH 下。同時,還需要一個 C 編譯器,例如 GNU Compiler Collection (GCC),和一組包含 make 和 m4 的開發工具。在 Mac OS X 上,免費的 Xcode 軟件開發環境提供了必需的構建工具。
完成以下操作步驟,在 Mac OS X 上構建、部署 XCache 並對其進行性能檢測。在其他平台上構建 XCache 與之類似。如果使用 Linux,則其發行版可能已經包含了 XCache 或者已經將其以預先打包好的格式提供給您。
增加 Mac OS X 的共享內存
首先增加 Mac OS X 上留出的共享內存總量。要實現這一目的,需創建(或編輯)文件 /etc/sysctl.conf 並創建如下條目:
清單 1. 增加 Mac OS X 上留出的共享內存總量
kern.sysv.shmmax=33554432
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.sysv.shmall=8192
這些設置把共享內存總量增加到了 32 MB。如還需進一步擴展共享內存,可以把 kern.sysv.shmall 設定為 kern.sysv.shmmax 除以硬件頁面大小。使用 sysctl hw.pagesize 能獲得硬件頁面大小。例如,假設需要 128 MB 的共享內存,那麼設定 kern.sysv.shmmax=134217728 並設定 kern.sysv.shmall=32768。
重啟 Mac OS X 使修改生效。重啟後,檢驗新設置是否生效,鍵入:
sysctl -a | grep kern.sysv
通過源代碼構建 XCache
接下來,通過源代碼構建 XCache。從 http://xcache.lighttpd.net 處下載源代碼。下載完後解壓代碼,並轉換到 .tar 文件創建的新目錄。
清單 2. 通過源代碼構建 XCache
$ cd /tmp
$ wget http://210.51.190.228/pub/XCache/Releases/xcache-1.2.0.tar.gz
$ tar xzf xcache-1.2.0.tar.gz
$ cd xcache
運行 phpize 為編譯 XCache 做准備。
清單 3. 運行 phpize
$ phpize
Configuring for:
PHP Api Version: 20020918
Zend Module Api No: 20020429
Zend Extension Api No: 20050606
運行 configure,創建適合於原生操作系統的 makefile。
清單 4. 運行 configure 創建 makefile
$ ./configure --enable-xcache --enable-xcache-coverager
checking build system type... i686-apple-darwin8.8.1
checking host system type... i686-apple-darwin8.8.1
...
creating libtool
configure: creating ./config.status
config.status: creating config.h
此處,--enable-xcache 選項包含 XCache 支持,--enable-xcache-coverager 選項包含用於測量加速器功效的附加特性。要啟用操作碼優化,添加 --enable-xcache-optimizer。
當然,下一步將使用 make 命令行構建和安裝代碼。運行 make,然後作為 root 用戶運行 make install 。