PHP優化加速之Opcache使用總結(轉載)
轉自 http://blog.csdn.net/why_2012_gogo/article/details/51134674
PHP優化加速之Opcache使用總結:
Opcache是一種通過將解析的PHP腳本預編譯的字節碼存放在共享內存中來避免每次加載和解析PHP腳本的開銷,解析器可以直接從共享內存讀取已經緩存的字節碼,從而大大提高PHP的執行效率。PS: 需要區別於Xcache機制,後續總結中會介紹其使用。
· 如何安裝
· 如何配置
· 如何使用
· 顯示分析
· 註意事項
一、如何安裝
在PHP 5.5.0及後續版本中,PHP已經將Opcache功能以拓展庫形式內嵌在發布版本中了,默認未開啟Opcache加速,需要開發人員在php.ini中添加或解註釋Opcache相關配置即可。對於之前的老版本,可以將Opcache作為PECL拓展庫進行安裝和配置,可以參考PHP拓展安裝及配置:
http://blog.csdn.net/why_2012_gogo/article/details/51120645
NOTE:
如果你使用 --disable-all 參數 禁用了默認擴展的構建, 那麽必須使用--enable-opcache 選項來開啟 Opcache。
二、如何配置
php.ini:
[opcache]
; 啟動操作碼緩存
opcache.enable=1
; 針對支持CLI版本PHP啟動操作碼緩存 一般被用來測試和調試
opcache.enable_cli=1
; 共享內存大小,單位為MB
opcache.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.so
NOTE:
上面列出的配置項是常用且重要的配置項,實際不止上面這些配置項。
三、如何使用
實際上,對於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的性能,通常在開發調試階段使用。如果就是想在生產環境開啟使用,那麽就必須做好安全限制工作。
好了,到這裏已經總結並介紹完了對於Opcache的使用,如需進一步優化底層,可以參看和修改源代碼,不過一般情況下不需要哦!
PHP優化加速之Opcache使用總結(轉載)