1. 程式人生 > >php opcache 詳解

php opcache 詳解

PHP效能提升之OPcache相關引數詳解

工具 memory 釋出於December 15, 2016 標籤: PHP

OPcache 通過將 PHP 指令碼預編譯的位元組碼儲存到共享記憶體中來提升 PHP 的效能, 儲存預編譯位元組碼的好處就是 省去了每次載入和解析 PHP 指令碼的開銷。

PHP 5.5.0 及後續版本中已經綁定了 OPcache 擴充套件。 對於 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL 擴充套件中的 OPcache 庫。

安裝

php5.5及以後的版本在編譯時加上

 --enable-opcache

選項來開啟 OPcache。

PHP 5.2, 5.3 和 5.4 版本則需要編譯pecl擴充套件
從 http://pecl.php.net/package/ZendOpcache 下載
大概如下:

cd extname
phpize
./configure --with-php-config=/path/php/bin/php-config
make
make install


配置指令的簡短說明

  • opcache.enable boolean 啟用操作碼快取。如果禁用此選項,則不會優化和快取程式碼
  • opcache.enable_cli boolean 僅針對 CLI 版本的 PHP 啟用操作碼快取
  • opcache.memory_consumption integer OPcache 的共享記憶體大小,以兆位元組為單位
  • opcache.interned_strings_buffer integer 用來儲存臨時字串的記憶體大小,以兆位元組為單位
  • opcache.max_accelerated_files integer OPcache 雜湊表中可儲存的指令碼檔案數量上限 設定值取值範圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之後是 1000000。
  • opcache.max_wasted_percentage integer 浪費記憶體的上限,以百分比計。 如果達到此上限,那麼 OPcache 將產生重新啟動續發事件。
  • opcache.use_cwd boolean 如果啟用,OPcache 將在雜湊表的指令碼鍵之後附加改指令碼的工作目錄, 以避免同名指令碼衝突的問題。 禁用此選項可以提高效能,但是可能會導致應用崩潰。
  • 比如,兩個指令碼名稱一樣..不使用此項,可能導致 兩個指令碼錯亂!!!
  • opcache.validate_timestamps boolean 如果啟用,那麼 OPcache 會每隔 opcache.revalidate_freq 設定的秒數 檢查指令碼是否更新。 如果禁用此選項,你必須使用 opcache_reset() 或者 opcache_invalidate() 函式來手動重置 OPcache,也可以 通過重啟 Web 伺服器來使檔案系統更改生效。
  • opcache.revalidate_freq integer 檢查指令碼時間戳是否有更新的週期,以秒為單位。 設定為 0 會導致針對每個請求, OPcache 都會檢查指令碼更新。如果 opcache.validate_timestamps 配置指令設定為禁用,那麼此設定項將會被忽略。
  • opcache.revalidate_path boolean 如果禁用此選項,在同一個 include_path 已存在的快取檔案會被重用
  • opcache.save_comments boolean 如果禁用,指令碼檔案中的註釋內容將不會被包含到操作碼快取檔案, 這樣可以有效減小優化後的檔案體積,但會導致某些框架不可用
  • opcache.load_comments boolean 如果禁用,則即使檔案中包含註釋,也不會載入這些註釋內容。 本選項可以和 opcache.save_comments 一起使用,以實現按需載入註釋內容。
  • opcache.fast_shutdown boolean 如果啟用,則會使用快速停止續發事件。
  • opcache.enable_file_override boolean 如果啟用,則在呼叫函式 file_exists(), is_file() 以及 is_readable() 的時候, 都會檢查操作碼快取,無論檔案是否已經被快取。 如果應用中包含檢查 PHP 指令碼存在性和可讀性的功能,這樣可以提升效能。 但是如果禁用了 opcache.validate_timestamps 選項, 可能存在返回過時資料的風險。
  • opcache.optimization_level integer 控制優化級別的二進位制位掩碼。
  • opcache.inherited_hack boolean 在 PHP 5.3 之前的版本,OPcache 會儲存程式碼中使用 DECLARE_CLASS 操作碼 來實現繼承的位置。當檔案被載入之後,OPcache 會嘗試使用當前環境來繫結被繼承的類。 由於當前指令碼中可能並不需要 DECLARE_CLASS 操作碼,如果這樣的指令碼需要對應的操作碼被定義時, 可能無法執行。 在 PHP 5.3 及後續版本中,此配置指令會被忽略。
  • opcache.dups_fix boolean 僅作為針對 “不可重定義類”錯誤的一種解決方案。
  • opcache.blacklist_filename string OPcache 黑名單檔案位置。 黑名單檔案為文字檔案,包含了不進行預編譯優化的檔名,每行一個檔名。 黑名單中的檔名可以使用萬用字元,也可以使用字首。 此檔案中以分號(;)開頭的行將被視為註釋。 
    例如:
; 將特定檔案加入到黑名單
/var/www/broken.php
; 以字元 x 檔案打頭的檔案
/var/www/x
; 萬用字元匹配
/var/www/*-broken.php
  • opcache.max_file_size integer 以位元組為單位的快取的檔案大小上限。設定為 0 表示快取全部檔案。
  • opcache.consistency_checks integer 如果是非 0 值,OPcache 將會每隔 N 次請求檢查快取校驗和
  • opcache.force_restart_timeout integer 如果快取處於非啟用狀態,等待多少秒之後計劃重啟。 如果超出了設定時間,則 OPcache 模組將殺除持有快取鎖的程序, 並進行重啟。
  • opcache.error_log string OPcache 模組的錯誤日誌檔案。
  • opcache.log_verbosity_level integer OPcache 模組的日誌級別。
  • opcache.preferred_memory_model string OPcache 首選的記憶體模組。可選值包括: mmap,shm, posix 以及 win32。
  • opcache.protect_memory boolean 保護共享記憶體,以避免執行指令碼時發生非預期的寫入
  • opcache.mmap_base string 在 Windows 平臺上共享記憶體段的基地址。
  • opcache.restrict_api string 僅允許路徑是以指定字串開始的 PHP 指令碼呼叫 OPcache API 函式。