天天看點

PHP7開啟opcache打造強悍性能

鳥哥在部落格中說,提高PHP 7性能的幾個tips,第一條就是開啟opcache:

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

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

那麼什麼是Opcache呢?

Opcache 的前生是 

Optimizer+

 ,它是PHP的官方公司 Zend 開發的一款閉源但可以免費使用的 PHP 優化加速元件。 Optimizer+ 将PHP代碼預編譯生成的腳本檔案 

Opcode

 緩存在共享記憶體中供以後反複使用,進而避免了從磁盤讀取代碼再次編譯的時間消耗。同時,它還應用了一些代碼優化模式,使得代碼執行更快。進而加速PHP的執行。

 PHP的正常執行流程如下

PHP7開啟opcache打造強悍性能

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

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

PHP7開啟opcache打造強悍性能

 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:

PHP7開啟opcache打造強悍性能

測試結果:

PHP7開啟opcache打造強悍性能

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

PHP7開啟opcache打造強悍性能

參考資料:Opcode是啥以及如何使用好Opcache

讓PHP7達到最高性能的幾個Tips 

作者:郁冬

出處:http://www.cnblogs.com/lamp01/

本文版權歸作者和部落格園共有,如需轉載,請注明出處。