Optimizer+ 是 Zend 開發的閉源但能夠無償使用的 PHP 優化加速組件,是第一個也是最快的 opcode 緩存工具。如今,Zend 科技公司將 Optimizer+ 在 PHP License 下開源成爲 Zend Opcache。php
GitHub地址:https://github.com/zendtech/ZendOptimizerPlusgit
Zend OPcache 經過 opcode 緩存和優化提供更快的 PHP 執行過程。它將預編譯的腳本文件存儲在共享內存中供之後使用,從而避免了從磁盤讀取代碼並進行編譯的時間消耗。同時,它還應用了一些代碼優化模式,使得代碼執行更快。github
1、什麼是 opcode 緩存?數據庫
當解釋器完成對腳本代碼的分析後,便將它們生成能夠直接運行的中間代碼,也稱爲操做碼(Operate Code,opcode)。Opcode cache 的目地是避免重複編譯,減小 CPU 和內存開銷。若是動態內容的性能瓶頸不在於 CPU 和內存,而在於 I/O 操做,好比數據庫查詢帶來的磁盤 I/O 開銷,那麼 opcode cache 的性能提高是很是有限的。可是既然 opcode cache 能帶來 CPU 和內存開銷的下降,這總歸是好事 —— 本着環保的態度,也應該儘可能減小消耗不是? :D緩存
現代操做碼緩存器(Optimizer+,APC2.0+,其餘)使用共享內存進行存儲,而且能夠直接從中執行文件,而不用在執行前「反序列化」代碼。這將帶來顯着的性能加速,一般下降了總體服務器的內存消耗,並且不多有缺點。bash
2、Optimizer+ 與 APC 的優缺點對比服務器
Optimizer+ 於 2013年3月中旬更名爲 Opcache。wordpress
根據 PHP wiki 上的討論,Zend Opcache 即將整合到 php 5.5 中。做爲 APC 的競爭對手,新生的 Zend Opcache 頗有可能取代 APC 的位置,雖然 OptimizerPlus 沒有象 APC 那樣的 user cache 功能。函數
OPTIMIZER+ 相對 APC 的優勢php-fpm
一、性能。根據測試,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 Opcache
如今已經可使用 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
#下載源代碼 (wget -c 代碼地址)
https://github.com/zendtech/ZendOptimizerPlus/archive/master.zip
#切換解壓後的源碼目錄,利用phpize執行安裝
cd /usr/local/src/ZendOptimizerPlus-master /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install
#編輯 php.ini,追加以下內容:
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so opcache.enable=1 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-fpm
service php-fpm restart
opcache相關參數,可參考:
GitHub:https://github.com/zendtech/ZendOptimizerPlus
上述github頁面中,有個推薦配置:
We recommend the following configuration options for best performance
in a production environment.opcache.enable=1
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手冊:http://php.net/manual/zh/opcache.configuration.php
4、查看 Zend Opcache 運行狀態
經過 phpinfo(); 函數,可查看 opcache 運行狀態:
注意:Used memory、Free memory 的單位是 字節 。