php中Opcache是什麼?Opcache原理和使用的介紹

本篇文章給大家帶來的內容是關於php中Opcache是什麼?Opcache原理和使用的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

 

一、個人實踐發現opcache

最近爲了應對雙十一期間高流量的衝擊,小編通過壓力測試去查找服務器性能瓶頸,發現100併發時,QPS
並不是很高,但CPU和內存消耗特別高,尤其是CPU消耗都100%了,而我們的容器和服務器配置都差不多升級到頂級了,這不是如此好的服務器該發揮的效果,於是小編進行了一次全面排查:

1、查看接口中數據庫查詢部分,該部分做了緩存,且redis的消耗並不是很高,排除數據庫和緩存的影響性能因素;

2、查看有沒有其他外部調用影響性能,發現這部分獲取數據僅僅是通過數據庫和緩存,因此排除;

3、查看接口程序代碼中有沒有複雜的邏輯計算,發現該部分處理的數據處理完了就直接緩存起來了,一段時間內數據來源都是redis緩存,因此排除

4、既然已上可能造成接口瓶頸的因此都排除了,那麼最有可能的是現在使用的laravel5.0框架造成接口性能如此低下,然後通過框架文檔、源碼及網上資料等發現laravel框架在運行時會加載大量框架文件,然後對這些文件進行編譯造成服務器CPU消耗特別高。通過這個方向,小編髮現了PHP一個不錯的緩存PHP編譯文件的擴展opcache。

二、opcache的原理

1、Opcache是什麼?

Opcache是一種通過將解析的PHP腳本預編譯的字節碼(Operate Code)存放在共享內存中來避免每次加載和解析PHP腳本的開銷,解析器可以直接從共享內存讀取已經緩存的字節碼(Operate Code),從而大大提高PHP的執行效率。

2、什麼是Operate Code?

當解釋器完成對腳本代碼的分析後,便將它們生成可以直接運行的中間代碼,也稱爲操作碼(Operate Code,opcode)。Opcode cache的目地是避免重複編譯,減少CPU和內存開銷。如果動態內容的性能瓶頸不在於CPU和內存,而在於I/O操作,比如數據庫查詢帶來的磁盤I/O開銷,那麼opcode cache的性能提升是非常有限的。但是既然opcode cache能帶來CPU和內存開銷的降低,這總歸是好事。現代操作碼緩存器(Optimizer+,APC2.0+,其他)使用共享內存進行存儲,並且可以直接從中執行文件,而不用在執行前“反序列化”代碼。這將帶來顯着的性能加速,通常特別是高流量和高併發量時降低了整體服務器的內存消耗,而且很少有缺點。

3、爲什麼要使用Opcode緩存?

這得從PHP代碼的生命週期說起,請求PHP腳本時,會經過五個步驟,如下圖所示:

2255034878-5bf792766a552_articlex.png

Zend引擎必須從文件系統讀取文件、掃描其詞典和表達式、解析文件、創建要執行的計算機代碼(稱爲Opcode),最後執行Opcode。每一次請求PHP腳本都會執行一遍以上步驟,如果PHP源代碼沒有變化,那麼Opcode也不會變化,顯然沒有必要每次都重行生成Opcode,結合在Web中無所不在的緩存機制,我們可以把Opcode緩存下來,以後直接訪問緩存的Opcode豈不是更快,啓用Opcode緩存之後的流程圖如下所示:

4165080241-5bf7928f60b88_articlex.png

因此使用了Operate Code緩存之後,PHP代碼會直接獲取opcode後直接執行,中間的三個步驟會省略掉因此會大幅提高PHP代碼執行效率

三、Opcache的安裝和使用

1、安裝

1

2

3

4

5

6

7

8

9

10

當你的PHP版本低於7.0時,你可以去http://pecl.php.net/package/ZendOpcache 根據自己的PHP版

本下載相應的opcache版本。比如PHP5.5:http://pecl.php.net/get/zendopcache-7.0.5.tgz

tar -zxvf zendopcache-7.0.5.tgz

cd zendopcache-7.0.5

phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install

這是會在php的擴展文件夾內生成opcache.so

PHP7.0之後自帶opcache.so無需安裝

2、使用

1

2

3

在php.ini加入zend_extension=opcache.so;

注意:這裏是zend_extension不是extension,關於zend_extension和extension的區別可以去查閱

相關資料

3、配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

關於opcache的詳細參數配置比較核心的參數如下:

opcache擴展位置

zend_extension=opcache.so

啓用opcache

opcache.enable=1

使用共享內存大小

opcache.memory_consumption=200

字符串緩存大小

opcache.interned_strings_buffer=8

最大緩存文件數量

opcache.max_accelerated_files=8000

出現異常,立即釋放全部內存

opcache.fast_shutdown=1

最大允許佔用內存百分比,超過此限制會重啓進程

opcache.max_wasted_percentage=20

如果置爲1,則將當前路徑加入到文件key中,以避免可能產生的同文件名的文件key衝突

opcache.use_cwd=1

文件檢測週期

revalidate_freq=3600

啓用文件緩存時間戳

opcache.validate_timestamps=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章