首頁  >  文章  >  後端開發  >  PHP之Opcache優化加速

PHP之Opcache優化加速

小云云
小云云原創
2018-03-27 11:53:381517瀏覽

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

; 共享記憶體大小,單位為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的效能,通常在開發調試階段使用。如果就是想在生產環境開啟使用,那就必須做好安全限制工作。

 相關推薦:

PHP 的Opcache加速的使用方法分享

opcache在php中的運用

#PHP優化加速之Opcache使用總結

以上是PHP之Opcache優化加速的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn