Zend OPCache 的前身是Zend Optimizer + (Zend O+),於 2013年3月中旬更名爲 Opcache。其經過 opcode 緩存和優化提供更快的 PHP 執行過程。它將預編譯的腳本文件存儲在共享內存中供之後使用,從而避免了從磁盤讀取代碼並進行編譯的時間消耗。同時,它還應用了一些代碼優化模式,使得代碼執行更快。php
PHP 在5.5發行版後自帶了Zend OPCache擴展,但默認沒有開啓,PHP5.2,5.3,5.4版也可使用,但須要自行下載擴展。html
->深刻理解PHP原理之Opcodesgit
當解釋器完成對腳本代碼的分析後,便將它們生成能夠直接運行的中間代碼,也稱爲操做碼(Operate Code,opcode)。github
Opcode cache 的目地是避免重複編譯,減小 CPU 和內存開銷。若是動態內容的性能瓶頸不在於 CPU 和內存,而在於 I/O 操做,好比數據庫查詢帶來的磁盤 I/O 開銷,那麼 opcode cache 的性能提高是很是有限的。數據庫
可是既然 opcode cache 能帶來 CPU 和內存開銷的下降,這總歸是好事 —— 本着環保的態度,也應該儘可能減小消耗不是? :Dapache
現代操做碼緩存器(Optimizer+,APC2.0+,其餘)使用共享內存進行存儲,而且能夠直接從中執行文件,而不用在執行前「反序列化」代碼。這將帶來顯着的性能加速,一般下降了總體服務器的內存消耗,並且不多有缺點。vim
1,PHP5.5版本前到此下載擴展,放到zend_ext目錄中。windows
2,修改php.ini配置緩存
[php]
engine = On
zend_extension=php_opcache.dll
3,根據官方建議php.ini的 [opcache] 下修改配置,以得到更好的性能服務器
[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
1,安裝擴展(PHP5.5版本以上跳過此步)
wget http://pecl.php.net/get/zendopcache-7.0.5.tgz tar zxvf zendopcache-7.0.5.tgz cd zendopcache-7.0.5 /path/to/php/bin/phpize ./configure --with-php-config=/path/to/php/bin/php-config make && make install
2,修改php.ini
①在[php]下添加
zend_extension=php_opcache.so
②在[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
配置完成後重啓apache或php-fpm,phpinfo()看到Zend OPCache爲Enabled
或
php -m|grep opcache,有顯示opcache
或
php -v 顯示with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies 便可
也許服務器上某些內容,好比正在進行調試的網站等,咱們不但願對其進行 OPcache。那就能夠經過黑名單來將須要例外的文件排除掉。
在 OPcache 的配置文件中有一行配置,以下,
opcache.blacklist_filename=/etc/php.d/opcache*.blacklist
該配置指定用於存儲文件名黑名單的那個文件。很顯然這裏使用通配符 * 來指定了一系列文件而不只僅是特定某個文件。能夠一直啓用這一行。等到須要排除某些文件的時候,就編輯對應的黑名單文件。例如,針對 /srv/www/sites/devSite 文件夾下的全部文件,編輯(或者新建)文件,
vim /etc/php.d/opcache-devSite.blacklist
內容爲,
/srv/www/sites/devSite/*
通配符 * 表示全部 devSite 文件夾下的文件。
完了以後從新啓動 php-fpm 服務就能夠了。
opcache_compile_file($php_file); #預生成opcode緩存
opcache_is_script_cached($php_file) #查看是否生成opcode緩存
opcache_invalidate($php_file, true) #清除單個緩存
opcache_reset(); #清空緩存
opcache_get_status(); #獲取緩存的狀態信息
opcache_get_configuration(); #獲取緩存的配置信息
->到此
【官方】
你也能夠禁用 opcache.save_comments 而且啓用 opcache.enable_file_override。
須要提醒的是,在生產環境中使用上述配置以前,必須通過嚴格測試。
由於上述配置存在一個已知問題,它會引起一些框架和應用的異常, 尤爲是在存在文檔使用了備註註解的時候。
若是禁用此選項,那麼PHP中全部的comment會被禁用,性能會提高,可是有些框架可能會受影響,好比Wordpress,Drupal八、PHPUnit等,建議不要禁用。
1,phpinfo()下能夠查看使用狀態;
2,https://github.com/amnuts/opcache-gui
3,https://github.com/PeeHaa/OpCacheGUI
4,https://github.com/rlerdorf/opcache-status
http://www.drupal001.com/2014/09/zend-opcache-php/
http://cnzhx.net/blog/zendopcache-accelerate-php/#install_via_source