PHP7開啟opcache打造強悍效能

2021-10-13 07:54:10 字數 2705 閱讀 4251

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

記得啟用zend opcache, 因為php7即使不啟用opcache速度也比php-5.6啟用了opcache快, 

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

那麼什麼是opcache呢?

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

php的正常執行流程如下

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

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

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:

測試結果:

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

PHP7開啟opcache打造強悍效能

鳥哥在部落格中說,提高php 7效能的幾個tips,第一條就是開啟opcache 記得啟用zend opcache,因為php7即使不啟用opcache速度也比php 5.6啟用了opcache快,所以之前測試時期就發生了有人一直沒有啟用opcache的事情 那麼什麼是opcache呢?opcach...

PHP7如何開啟opcache擴充套件

opcache 說白了就是將php源 進行快取,而不再需要編譯二進位制。php7預設已經安裝了opcahe拓展,只需要開啟即可 vim usr local php etc php.ini zend extension opcache.so cli環境下,php啟用opcache opcache.en...

PHP開啟opcache快取

php.ini開啟 opcache zend extension php opcache.dll 開啟opcache opcache.enable 1 是否在cli 即命令行時 啟用opcache opcache.enable cli 1 共享記憶體的大下 可以根據專案大小和伺服器配置自行調整 op...