Optimizer+ 是 Zend 開發的閉源但可以免費使用的 PHP 優化加速組件,是第一個也是最快的 opcode 緩存工具。現在,Zend 科技公司將 Optimizer+ 在 PHP License下開源成為 Zend Opcache。Zend OPcache 通過 opcode 緩存和優化...
Optimizer+ 是 Zend 開發的閉源但可以免費使用的 PHP 優化加速組件,是第一個也是最快的 opcode 緩存工具。現在,Zend 科技公司將 Optimizer+ 在 PHP License 下開源成為 Zend Opcache。
Zend OPcache 通過 opcode 緩存和優化提供更快的 PHP 執行過程。它將預編譯的腳本文件存儲在共用記憶體中供以後使用,從而避免了從磁碟讀取代碼併進行編譯的時間消耗。同時,它還應用了一些代碼優化模式,使得代碼執行更快。
1. 什麼是 opcode 緩存?
當解釋器完成對腳本代碼的分析後,便將它們生成可以直接運行的中間代碼,也稱為操作碼(Operate Code,opcode)。Opcode cache 的目地是避免重覆編譯,減少 CPU 和記憶體開銷。如果動態內容的性能瓶頸不在於 CPU 和記憶體,而在於 I/O 操作,比如資料庫查詢帶來的磁碟 I/O 開銷,那麼 opcode cache 的性能提升是非常有限的。但是既然 opcode cache 能帶來 CPU 和記憶體開銷的降低,這總歸是好事 —— 本著環保的態度,也應該儘量減少消耗不是? :D
現代操作碼緩存器(Optimizer+,APC2.0+,其他)使用共用記憶體進行存儲,並且可以直接從中執行文件,而不用在執行前“反序列化”代碼。這將帶來顯著的性能加速,通常降低了整體伺服器的記憶體消耗,而且很少有缺點。
2. Optimizer+ 與 APC 的優缺點對比
Optimizer+ 於 2013年3月中旬改名為 Opcache。
根據 PHP wiki 上的討論,Zend Opcache 即將整合到 php 5.5 中。作為 APC 的競爭對手,新生的 Zend Opcache 很有可能取代 APC 的位置,雖然 OptimizerPlus 沒有象 APC 那樣的 user cache 功能。
OPTIMIZER+ 相對 APC 的優點
- 性能。根據測試,Zend Optimizer+ 始終優於 APC。隨代碼差異,每秒鐘處理的請求數高 5~20%。Google doc 上記錄的測試結果中,WordPress 2.1.1(不知道為什麼不用個新版本的 WP 來測試),性能提高約 8%。理論上來說,對於 WP 3.5.1,性能應該也能得到大約 5~10% 的提升吧。對於運行 WordPress 的伺服器而言,使用 Optimizer+ 可以顯著降低 CPU 使用率和提高頁面載入速度(graphics here)。
- 支持新的 PHP 版本。Zend 和 PHP 社區都會幫助 Optimizer+ 能夠支持最新版本的 PHP。
- 可靠性。Optimizer+ 擁有可選的損壞檢測能力,可以防止因數據損壞而導致的伺服器崩潰。
- 更好的相容性。PHP 社區打算讓 Optimizer+ 與社區支持的所有 PHP 版本相相容。
APC 相對 OPTIMIZER+ 的優勢
- APC 有數據緩存 API,而 Optimizer+ 沒有。
- APC 能夠回收舊的無效的腳本占用的記憶體。APC 有記憶體管理器,可以將那些不再使用的腳本關聯的記憶體進行回收。而 Optimizer+ 不同,它將這樣的記憶體標記為“髒的”,但並不會回收它們。一旦“髒的”記憶體占用配置閾值的百分比達到一定值,Optimizer+ 就將自己重新啟動。這種行為在穩定性上既有優勢也有劣勢。
3. 使用 Zend Opcode
現在已經可以使用 Zend Opcache 替代 APC 作為 PHP 優化加速工具了。目前的 Zend Opcode 相容 PHP 5.2.*、5.3.*、5.4.* 和 PHP-5.5 開發版。不過,將來會取消對 PHP 5.2 的支持。
註意:Zend Opcache 與 eaccelerator 相衝突。要安裝 Zend Opcache,可能需要先卸載 eaccelerator —— 如果你用了這個加速模塊的話。
從源碼安裝並配置
Zend Opcache 的源代碼托管在 github 上,目前還是叫做 ZendOptimizerPlus。
安裝步驟詳見其 README 文件。
註意:
- 最好在本地虛擬機里測試之後再部署到自己的伺服器上;
- 安裝前最好先刪除 eacceleratro、xcache 或 apc 等組件。
順便說一句,從源碼編譯安裝時需要用到 php-devel。README 中快速安裝一節的開頭就用到,
$PHP_DIR/bin/phpize
如果不清楚 phpize 的路徑,可以,
whereis phpize
README 文件中也有相應的推薦優化設置。
從 EPEL 源安裝並配置
我不喜歡從源碼編譯安裝程式,一個是水平有限,一個就是怕麻煩。下麵介紹從 EPEL 安裝源安裝 Zend Opcache,以 CentOS 上的操作為例,基於我的 VPS 的配置。
EPEL 社區已經提供了 Zend Opcache 的安裝包,可以直接 yum 安裝。當然,前提是已經配置使用了 EPEL 的安裝源。如果沒有,可以參考這裡。
提醒一下,REMI 安裝源上的 PHP 已經是 5.4 版本了。鑒於有人測試說 WordPress 在 PHP 5.4 上的性能要優於在 PHP 5.3 上的性能(10% faster and lower ram consuming),順便升級一下 PHP 也不是什麼壞事。
操作步驟:
- 配置使用 epel 安裝源。已有則跳過。
- 刪除 eaccelerator、xcache、apc:
yum remove php-eaccelerator php-xcache php-apcu
沒有使用則跳過。
- 對系統執行升級:
yum update
目的是根據 remi 安裝源的狀態升級當前的 php 等軟體到 remi 支持的最新版本。此時,可以看到系統有類似下麵的輸出:
Updating : php-common-5.4.14-1.el6.remi.i686 1/26 WARNING : These php-* RPM are not official Fedora / Red Hat build and overrides the official ones. Don't file bugs on Fedora Project nor Red Hat. Use dedicated forums http://forums.famillecollet.com/ warning: /etc/php.ini created as /etc/php.ini.rpmnew Updating : mysql-libs-5.5.31-1.el6.remi.i686 2/26 WARNING : This MySQL RPM is not an official Fedora / Red Hat build and it overrides the official one. Don't file bugs on Fedora Project nor Red Hat. Use dedicated forums http://forums.famillecollet.com/ warning: /etc/my.cnf created as /etc/my.cnf.rpmnew
表示我們現在要從 Fedora / Red Hat 的版本遷移到 Remi 版本了,所以不要去 Fedora / Red Hat 尋求幫助了。呵呵,貌似出問題都是在網上找,還真是很少到官方論壇里提問。像我這樣的入門級用戶,也不會遇到那麼深度的問題。
- 安裝 Zend Opcache(pecl 版本):
yum install php-pecl-zendopcache
安裝時產生的 opcache 的配置文件位於預設的
/etc/php.d
目錄中:opcache-default.blacklist opcache.ini
這個配置文件採用的基本就是 README 中的推薦設置,只有幾個地方需要修改。
vi /etc/php.d/opcache.ini
對照如下推薦配置修改並保存即可(可參考完整的 Zend Opcache 配置信息):
opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
- 不需要修改 php.ini 配置,重起 Apache 服務使之生效:
service httpd restart
查詢一下看看是否正確啟動了:
php -v
輸出結果類似於:
PHP 5.4.14 (cli) (built: Apr 11 2013 11:04:35) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.1, Copyright (c) 1999-2013, by Zend Technologies
原文轉載於:http://cnzhx.net/blog/zendopcache-accelerate-php/ 感謝原著