PHP效能加速-opcache

learning_php發表於2020-12-25

一.opcache介紹

OPcache 是一個通過將 PHP 指令碼預編譯的位元組碼儲存到共享記憶體中來提升 PHP 效能的PHP擴充套件。 儲存預編譯位元組碼的好處就是 省去了每次載入和解析 PHP 指令碼的開銷。PHP 5.5.0 及後續版本中已經繫結了 OPcache 擴充套件。

二.php處理流程

http request ---> nginx(代理)----> php-fpm(master 程式,分配)----> php-fpm(worker處理 ) ---->php-cgi(1.啟動ZEND引擎,載入配置,載入module,2.初始化php指令碼進行詞法分析,語法分析,生成語法樹,3.ZEND引擎編譯語法樹,生成可執行位元組碼。4.執行位元組碼,返回處理結果)

三.opcache作用

opcache 就快取了php指令碼預編譯的位元組碼避免每次處理請求都重複執行(php-cgi處理的1,2,3)步驟,這樣可以使得php效能大大提高。

四.php配置opcache

開啟opcache

php.ini配置

[opcache]
;開啟opcache模組
zend_extension=opcache.so 
;開啟opcache
opcache.enable=1 
opcache.enable_cli=1
; The OPcache shared memory storage size 設定共享記憶體大小
opcache.memory_consumption=128
; 儲存臨時字串的記憶體大小
opcache.interned_strings_buffer=8
;OPcache雜湊表中的最大鍵(指令碼)數Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=10000
; 在計劃重新啟動之前,“浪費”記憶體的最大百分比.
opcache.max_wasted_percentage=5
;如果啟用,那麼 OPcache 會每隔 [opcache.revalidate_freq](https://www.php.net/manual/zh/opcache.configuration.php#ini.opcache.revalidate-freq) 設定的秒數 檢查指令碼是否更新。 如果禁用此選項,你必須使用 [opcache_reset()](https://www.php.net/manual/zh/function.opcache-reset.php) 或者 [opcache_invalidate()](https://www.php.net/manual/zh/function.opcache-invalidate.php) 函式來手動重置 OPcache,也可以 通過重啟 Web 伺服器來使檔案系統更改生效
opcache.validate_timestamps=1
;檢查指令碼時間戳是否有更新的週期,以秒為單位。 設定為 0 會導致針對每個請求, OPcache 都會檢查指令碼更新,與opcache.validate_timestamps配合使用
opcache.revalidate_freq=3600
;通常做法是不設定opcache過期時間,通過每次更新程式碼重啟php-fpm來實現opcache的更新,所以更新程式碼的時間點儘量避免高流量時段

五.關閉opcache

將php.ini中opcache.enable=1 改成  opcache.enable=0

相關文章