利用 Opcache 擴充套件提升 PHP7 效能

2020-07-16 10:06:16
鳥哥在部落格中說,提高PHP 7效能的幾個tips,第一條就是開啟opcache:

記得啟用Zend Opcache, 因為PHP7即使不啟用Opcache速度也比PHP-5.6啟用了Opcache快,

所以之前測試時期就發生了有人一直沒有啟用Opcache的事情

那麼什麼是Opcache呢?

Opcache 的前生是 Optimizer+ ,它是PHP的官方公司 Zend 開發的一款閉源但可以免費使用的 PHP 優化加速元件。 Optimizer+ 將PHP程式碼預編譯生成的指令碼檔案 Opcode 快取在共用記憶體中供以後反復使用,從而避免了從磁碟讀取程式碼再次編譯的時間消耗。同時,它還應用了一些程式碼優化模式,使得程式碼執行更快。從而加速PHP的執行。

PHP的正常執行流程如下

微信截圖_20200506104323.png

request請求(nginx,apache,cli等)-->Zend引擎讀取.php檔案-->掃描其詞典和表示式 -->解析檔案-->建立要執行的計算機程式碼(稱為Opcode)-->最後執行Opcode--> response 返回

每一次請求PHP指令碼都會執行一遍以上步驟,如果PHP原始碼沒有變化,那麼Opcode也不會變化,顯然沒有必要每次都重新生成Opcode,結合在Web中無所不在的快取機制,我們可以把Opcode快取下來,以後直接存取快取的Opcode豈不是更快,啟用Opcode快取之後的流程圖如下所示:

微信截圖_20200506104348.png

Opcode cache 的目地是避免重複編譯,減少 CPU 和記憶體開銷。

下面介紹Opcache的安裝

安裝:

1、找到opcache的擴充套件,我的是php7.1

yum list php71*

2、安裝擴充套件

yum install php71w-opcache.x86_64

設定:

zend_extension=opcache.so
[opcache]
;開啟opcache
opcache.enable=1  
;CLI環境下,PHP啟用OPcache
opcache.enable_cli=1
;OPcache共用記憶體儲存大小,單位MB
opcache.memory_consumption=128  
;PHP使用了一種叫做字串駐留(string interning)的技術來改善效能。例如,如果你在程式碼中使用了1000次字串「foobar」,在PHP內部只會在第一使用這個字串的時候分配一個不可變的記憶體區域來儲存這個字串,其他的999次使用都會直接指向這個記憶體區域。這個選項則會把這個特性提升一個層次——預設情況下這個不可變的記憶體區域只會存在於單個php-fpm的進程中,如果設定了這個選項,那麼它將會在所有的php-fpm進程中共用。在比較大的應用中,這可以非常有效地節約記憶體,提高應用的效能。
這個選項的值是以兆位元組(megabytes)作為單位,如果把它設定為16,則表示16MB,預設是4MB
opcache.interned_strings_buffer=8
;這個選項用於控制記憶體中最多可以快取多少個PHP檔案。這個選項必須得設定得足夠大,大於你的專案中的所有PHP檔案的總和。
設定值取值範圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之後是 1000000。也就是說在200到1000000之間。
opcache.max_accelerated_files=4000
;設定快取的過期時間(單位是秒),為0的話每次都要檢查
opcache.revalidate_freq=60
;從字面上理解就是「允許更快速關閉」。它的作用是在單個請求結束時提供一種更快速的機制來呼叫程式碼中的解構器,從而加快PHP的響應速度和PHP進程資源的回收速度,這樣應用程式可以更快速地響應下一個請求。把它設定為1就可以使用這個機制了。
opcache.fast_shutdown=1
;如果啟用(設定為1),OPcache會在opcache.revalidate_freq設定的秒數去檢測檔案的時間戳(timestamp)檢查指令碼是否更新。
如果這個選項被禁用(設定為0),opcache.revalidate_freq會被忽略,PHP檔案永遠不會被檢查。這意味著如果你修改了你的程式碼,然後你把它更新到伺服器上,再在瀏覽器上請求更新的程式碼對應的功能,你會看不到更新的效果
強烈建議你在生產環境中設定為0,更新程式碼後,再平滑重新啟動PHP和web伺服器。
opcache.validate_timestamps=0 
;開啟Opcache File Cache(實驗性), 通過開啟這個, 我們可以讓Opcache把opcode快取快取到外部檔案中, 對於一些指令碼, 會有很明顯的效能提升.
這樣PHP就會在/tmp目錄下Cache一些Opcode的二進位制匯出檔案, 可以跨PHP生命週期存在.
opcache.file_cache=/tmp

檢視phpinfo:

微信截圖_20200506104514.png

測試結果:

微信截圖_20200506104621.png

同樣的介面從以前的幾百毫秒提升到現在的50ms左右

微信截圖_20200506104630.png

推薦教學:《PHP7

以上就是利用 Opcache 擴充套件提升 PHP7 效能的詳細內容,更多請關注TW511.COM其它相關文章!