Zend OPcache 經過 opcode 緩存和優化提供更快的 PHP 執行過程。它將預編譯的腳本文件存儲在共享內存中供之後使用,從而避免了從磁盤讀取代碼並進行編譯的時間消耗。同時,它還應用了一些代碼優化模式,使得代碼執行更快。 php
當解釋器完成對腳本代碼的分析後,便將它們生成能夠直接運行的中間代碼,也稱爲操做碼(Operate Code,opcode)。Opcode cache 的目地是避免重複編譯,減小 CPU 和內存開銷。若是動態內容的性能瓶頸不在於 CPU 和內存,而在於 I/O 操做,好比數據庫查詢帶來的磁盤 I/O 開銷,那麼 opcode cache 的性能提高是很是有限的。可是既然 opcode cache 能帶來 CPU 和內存開銷的下降,這總歸是好事 —— 本着環保的態度,也應該儘可能減小消耗不是? :D mysql
現代操做碼緩存器(Optimizer+,APC2.0+,其餘)使用共享內存進行存儲,而且能夠直接從中執行文件,而不用在執行前「反序列化」代碼。這將帶來顯着的性能加速,一般下降了總體服務器的內存消耗,並且不多有缺點。 git
Optimizer+ 於 2013年3月中旬更名爲 Opcache。 github
根據 PHP wiki 上的討論,Zend Opcache 即將整合到 php 5.5 中。做爲 APC 的競爭對手,新生的 Zend Opcache 頗有可能取代 APC 的位置,雖然 OptimizerPlus 沒有象 APC 那樣的 user cache 功能。 sql
如今已經可使用 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 —— 若是你用了這個加速模塊的話。 centos
Zend Opcache 的源代碼託管在 github 上,目前仍是叫作 ZendOptimizerPlus。 緩存
安裝步驟詳見其 README 文件。 服務器
注意: ide
順便說一句,從源碼編譯安裝時須要用到 php-devel。README 中快速安裝一節的開頭就用到,
$PHP_DIR/bin/phpize
若是不清楚 phpize 的路徑,能夠,
whereis phpize
README 文件中也有相應的推薦優化設置。
我不喜歡從源碼編譯安裝程序,一個是水平有限,一個就是怕麻煩。下面介紹從 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 也不是什麼壞事。
操做步驟:
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 尋求幫助了。呵呵,貌似出問題都是在網上找,還真是不多到官方論壇裏提問。像我這樣的入門級用戶,也不會遇到那麼深度的問題。
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
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
PHP 上有很多 opcode cache 組件,如 APC、eAccelerator、XCache 等。(參見 Wikipedia 上的 PHP accelerators 列表。)看 PHP wiki 上的意思,這個新引入的 Zend Opcache 的性能應該是最好的。無論用哪一個組件,總歸是用一個纔好。
對於小型的服務器,彷佛這幾個組件的性能差別並不太明顯。個人想法是,既然用了,那就用個最好的吧。可是若是你正在使用別的 opcode cache,好比上面提到的這幾個中的一個,從性能提高上講,卻是不必馬上就換。
對這個站,首頁生成時間:僅使用 PHP 的時候,大約 0.9s;使用 eAccelerator 大約 0.63s;使用 Zend Opcache 後大約 0.55s。測試得很是簡陋,多打開幾回看看 WP Super Cache 提供的頁面生成時間,估計一個平均數。
登陸到系統裏看了看 Apache 進程的內存佔用。以前一個進程很少大一下子就能佔用 40MB 以上的內存,如今基本上沒有高於 40MB 的了。只是不知道是 php 5.4 的功勞呢,仍是 Zend Opcache 的功勞。
不知道您以爲這個 Zend Opcache 的效果如何?若是您有興趣,不妨留言寫下您的測試結果。©