Opcache是一種透過將解析的PHP腳本預先編譯的字節碼存放在共享記憶體中來避免每次載入和解析PHP腳本的開銷,解析器可以直接從共享記憶體讀取已經快取的字節碼,從而大大提高PHP的執行效率。 PS: 需要區別於Xcache機制,後續總結中會介紹其使用。
· 如何安裝
· 如何設定
· 如何使用
· 顯示分析
#· #一、如何安裝在PHP 5.5.0及後續版本中,PHP已經將Opcache功能以拓展庫形式內嵌在發布版本中了,預設未開啟Opcache加速,需要開發人員在php. ini中新增或解註解Opcache相關配置即可。對於先前的舊版,可以將Opcache作為PECL拓展庫進行安裝與設定。 NOTE:如果你使用 --disable-all 參數 禁用了預設擴充功能的構建, 那麼必須使用--enable-opcache 選項來開啟 Opcache。 二、如何設定php.ini:[opcache]; 啟動操作碼快取opcache.enable= 1; 針對支援CLI版本PHP啟動操作碼快取一般用來測試和除錯opcache.enable_cli=1; 共享記憶體大小,單位為MBopcache.memory_consumption=128; 儲存暫存字串快取大小,單位為MB,PHP5.3.0先前會忽略此項目配置#opcache.interned_strings_buffer=8; 快取檔案數最大限制,命中率不到100%,可以試著提高這個值opcache.max_accelerated_files=4000; 一定時間內檢查檔案的修改時間, 這裡設定檢查的時間週期, 預設為2, 單位為秒opcache.revalidate_freq=60; 開啟快速停止續發事件,依賴Zend引擎的記憶體管理模組,一次釋放全部請求變數的內存,而不是依序釋放記憶體區塊opcache.fast_shutdown=1;啟用檢查PHP 腳本存在性和可讀性的功能,無論檔案是否已經被緩存,都會檢查操作碼快取,可以提升效能。 但是如果禁用了 opcache.validate_timestamps選項, 可能有傳回過時資料的風險。 opcache.enable_file_override=1; 拓展函式庫 so檔關聯載入zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts -20131226/opcache.soNOTE:上面所列的設定項是常用且重要的設定項,實際上不只上面這些設定項。 三、如何使用實際上,對於Opcache的使用,主要體現在其提供的幾個函數:1、opcache_get_configuration;################################形式:array opcache_get_configuration(void);######取得設定的快取設定信息,以陣列形式傳回設定資訊、黑名單及版本號。 ######2、opcache_get_status;######形式:array opcache_get_status(void);######取得設定的快取狀態資訊。 ######3、opcache_invalidate;######形式:boolean opcache_invalidate (string);######此函數的作用是使得指定腳本的字節碼快取失效。如果###force### 沒有設定或傳入的是 ###FALSE###,那麼只有當腳本的修改時間 比對應字節碼的時間更新,腳本的快取才會失效。 ######4、opcache_reset;######形式:boolean opcache_reset(void);######此函數將重設整個字節碼快取。在呼叫 opcache_reset() 之後,所有的腳本將會重新載入並且在下次被點擊的時候重新解析。 ######5、opcache_compile_file;######形式:boolean opcache_compile_file (string);######無需執行,就可以編譯並快取腳本。 ######6、opcache_is_script_cached####
形式:boolean opcache_is_script_cached (string);
判斷某個腳本是否已經快取到Opcache。
下面我寫一個PHP腳本,囊括上面的幾個函數的封裝,這樣也方便日後對Opcache的維護和管理,具體如下:
<?php /** * 这个文件是对opcache优化器的几个 * 函数的封装,作为一个工具脚本使用 */ if(!extension_loaded("ZendOpcache")) { echo "You do nothave the Zend OPcache extension loaded , please open it up,then retry!"; } /** * 函数操作封装类 * 数组形式的结果,会转为json格式返回,不做显示上的处理 * 这里主要处理的是影响Opcache缓存状态的操作,对于查看 * Opcache各项指标的处理,可查看项目:opcache-status */ class OpcacheScriptModel{ private $_configuration; private $_status; function __construct() { $this->_configuration =opcache_get_configuration(); $this->_status =opcache_get_status(); } // 获取配置信息 public function getConfigDatas(){ echo json_encode($this->_configuration); } // 获取状态信息 public function getStatusDatas(){ echo json_encode($this->_status); } // 指定某脚本文件字节码缓存失效 public function invalidate($script){ return opcache_invalidate($script); } // 重置或清除整个字节码缓存数据 public function reset() { return opcache_reset(); } // 无需运行,就可以编译并缓存脚本 public function compile($file){ return opcache_compile_file($file); } // 判断某个脚本是否已经缓存到Opcache public function isCached($script){ return opcache_is_script_cached($script); } } // 获得对象 function getOpcacheDataModel(){ // 初始化对象 $dataModel = NULL; if(NULL ==$dataModel) { $dataModel = new OpcacheScriptModel(); } return $dataModel; } ?>
上面的腳本工具比較簡單,一般可放在專案中或是單獨作為工具使用,需要時去解析編譯即可,其實下面的顯示分析開源項目,也是使用上面的API函數,只不過其將獲得數據以圖形化形式展示出來,這樣更加直觀,請繼續往下看。
四、顯示分析
我們知道PHP腳本的執行機制是,解析器解析PHP腳本文件,並將其解析為字節碼數據,而Opcache優化器的作用就是緩存被解析的字節碼數據,做到直接從快取中讀取而不需要每次都重複PHP腳本的加載和解析工作,所以對於Opcache的使用,我們一般只需要做兩件事兒:
1、使用Opcache優化器,加快PHP程式的執行速度;
2、透過Opcache各項指標參數,即時了解目前PHP程式的效能狀態;
那麼,我們如何去查看和分析目前的Opcache加速效果那?答案是可以使用下Github上開源的專案:https://github.com/rlerdorf/opcache-status
將下載下來的專案放入到目前的Web伺服器根目錄下,直接存取即可,先看效果:
#從上面的截圖及專案文件看出,該Opcache工具是一個簡化的GUI版本,使用它可以清楚地了解和分析下面的內容:
1、快取使用情況、剩餘情況及記憶體浪費情況及比例;
2、快取的keys、剩餘的keys數;
3、快取命中數以及未命中數;
4、快取配置、狀態以及快取擷取腳本;
5、快取的腳本文件,以視圖形式劃分直觀顯示;
好了,Opcache的視覺化就說到這裡,下面看下幾項注意點。
五、注意事項
1、不建議Xcache和Opcache同時啟用PHP最佳化;
因為PHP 5.5.0及後續版本已經內嵌對Opcache的支持,所以PHP意識到其重要性,相對於Xcache等第三方的PHP優化器來說,使用Opcache會是更好的選擇。另外,兩者同時存在的話,會使Opcache的快取命中數大大降低,而且增加不必要的開銷。
2、不建議在開發過程中開啟Opcache
原因很明顯,開啟了Opcache之後,開發人員修改的內容不會立即顯示和生效,因為受到opcache.revalidate_freq=60的影響,所以建議在開發並測試之後,測試性能時再行打開測試,當然,生產環境一直都要開著Opcache了哦。
3、不建議將Opcache指標設定太大
Opcache各項指標配置大小或是否開啟,需結合專案實際狀況需求及Opcache官方建議的配置,專案的實際狀況分析,可結合上面第四部分的可視化快取資訊分析調整。
4、不建議長期使用舊版的Opcache
建議及時關注Opcache官網動態,即時了解其的bugs修復,功能優化及新增功能,以便更好的將其應用在自己的專案中。
5、不建議在生產環境中,將上面介紹的開源專案放入Web服務根目錄
原因很簡單,因為這個開源專案並未做存取的限制和安全處理,也就是說凡是可以訪問外網的用戶,只要知道了訪問地址就可以直接訪問,所以不安全。一般下,這個開源工具只是幫助視覺化分析PHP的效能,通常在開發調試階段使用。如果就是想在生產環境開啟使用,那就必須做好安全限制工作。
相關推薦:
以上是PHP之Opcache優化加速的詳細內容。更多資訊請關注PHP中文網其他相關文章!