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

不言
發布: 2023-04-04 13:22:01
轉載
15226 人瀏覽過

這篇文章帶給大家的內容是關於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腳本時,會經過五個步驟,如下圖所示:

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

Zend引擎必須從檔案系統讀取檔案、掃描其字典和表達式、解析檔案、建立要執行的電腦程式碼(稱為Opcode),最後執行Opcode。每次請求PHP腳本都會執行一遍以上步驟,如果PHP原始碼沒有變化,那麼Opcode也不會變化,顯然沒有必要每次都重行產生Opcode,結合在Web中無所不在的快取機制,我們可以把Opcode快取下來,以後直接存取快取的Opcode豈不是更快,啟用Opcode快取之後的流程圖如下所示:

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

##因此使用了Operate Code快取之後,PHP程式碼會直接取得opcode後直接執行,中間的三個步驟會省略掉因此會大幅提高PHP程式碼執行效率


##三、Opcache的安裝與使用

1、安裝

当你的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、使用

 在php.ini加入zend_extension=opcache.so;
 注意:这里是zend_extension不是extension,关于zend_extension和extension的区别可以去查阅
 相关资料
登入後複製

3、設定

关于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
登入後複製

#

以上是php中Opcache是​​什麼? Opcache原理與使用的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!