国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

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

2020-03-22 18:54:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于php中Opcache是什么?Opcache原理和使用的介紹,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

一、個(gè)人實(shí)踐發(fā)現(xiàn)opcache

最近為了應(yīng)對(duì)雙十一期間高流量的沖擊,小編通過(guò)壓力測(cè)試去查找服務(wù)器性能瓶頸,發(fā)現(xiàn)100并發(fā)時(shí),QPS
并不是很高,但CPU和內(nèi)存消耗特別高,尤其是CPU消耗都100%了,而我們的容器和服務(wù)器配置都差不多升級(jí)到頂級(jí)了,這不是如此好的服務(wù)器該發(fā)揮的效果,于是小編進(jìn)行了一次全面排查:

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

2、查看有沒(méi)有其他外部調(diào)用影響性能,發(fā)現(xiàn)這部分獲取數(shù)據(jù)僅僅是通過(guò)數(shù)據(jù)庫(kù)和緩存,因此排除;

3、查看接口html' target='_blank'>程序代碼中有沒(méi)有復(fù)雜的邏輯計(jì)算,發(fā)現(xiàn)該部分處理的數(shù)據(jù)處理完了就直接緩存起來(lái)了,一段時(shí)間內(nèi)數(shù)據(jù)來(lái)源都是redis緩存,因此排除

4、既然已上可能造成接口瓶頸的因此都排除了,那么最有可能的是現(xiàn)在使用的laravel5.0框架造成接口性能如此低下,然后通過(guò)框架文檔、源碼及網(wǎng)上資料等發(fā)現(xiàn)laravel框架在運(yùn)行時(shí)會(huì)加載大量框架文件,然后對(duì)這些文件進(jìn)行編譯造成服務(wù)器CPU消耗特別高。通過(guò)這個(gè)方向,小編發(fā)現(xiàn)了PHP一個(gè)不錯(cuò)的緩存PHP編譯文件的擴(kuò)展opcache。

二、opcache的原理

1、Opcache是什么?

Opcache是一種通過(guò)將解析的PHP腳本預(yù)編譯的字節(jié)碼(Operate Code)存放在共享內(nèi)存中來(lái)避免每次加載和解析PHP腳本的開(kāi)銷,解析器可以直接從共享內(nèi)存讀取已經(jīng)緩存的字節(jié)碼(Operate Code),從而大大提高PHP的執(zhí)行效率。

2、什么是Operate Code?

當(dāng)解釋器完成對(duì)腳本代碼的分析后,便將它們生成可以直接運(yùn)行的中間代碼,也稱為操作碼(Operate Code,opcode)。Opcode cache的目地是避免重復(fù)編譯,減少CPU和內(nèi)存開(kāi)銷。如果動(dòng)態(tài)內(nèi)容的性能瓶頸不在于CPU和內(nèi)存,而在于I/O操作,比如數(shù)據(jù)庫(kù)查詢帶來(lái)的磁盤I/O開(kāi)銷,那么opcode cache的性能提升是非常有限的。但是既然opcode cache能帶來(lái)CPU和內(nèi)存開(kāi)銷的降低,這總歸是好事。現(xiàn)代操作碼緩存器(Optimizer+,APC2.0+,其他)使用共享內(nèi)存進(jìn)行存儲(chǔ),并且可以直接從中執(zhí)行文件,而不用在執(zhí)行前“反序列化”代碼。這將帶來(lái)顯著的性能加速,通常特別是高流量和高并發(fā)量時(shí)降低了整體服務(wù)器的內(nèi)存消耗,而且很少有缺點(diǎn)。

3、為什么要使用Opcode緩存?

這得從PHP代碼的生命周期說(shuō)起,請(qǐng)求PHP腳本時(shí),會(huì)經(jīng)過(guò)五個(gè)步驟,如下圖所示:

2255034878-5bf792766a552_articlex.png

Zend引擎必須從文件系統(tǒng)讀取文件、掃描其詞典和表達(dá)式、解析文件、創(chuàng)建要執(zhí)行的計(jì)算機(jī)代碼(稱為Opcode),最后執(zhí)行Opcode。每一次請(qǐng)求PHP腳本都會(huì)執(zhí)行一遍以上步驟,如果PHP源代碼沒(méi)有變化,那么Opcode也不會(huì)變化,顯然沒(méi)有必要每次都重行生成Opcode,結(jié)合在Web中無(wú)所不在的緩存機(jī)制,我們可以把Opcode緩存下來(lái),以后直接訪問(wèn)緩存的Opcode豈不是更快,啟用Opcode緩存之后的流程圖如下所示:

4165080241-5bf7928f60b88_articlex.png

因此使用了Operate Code緩存之后,PHP代碼會(huì)直接獲取opcode后直接執(zhí)行,中間的三個(gè)步驟會(huì)省略掉因此會(huì)大幅提高PHP代碼執(zhí)行效率

三、Opcache的安裝和使用

1、安裝

當(dāng)你的PHP版本低于7.0時(shí),你可以去http://pecl.php.net/package/ZendOpcache 根據(jù)自己的PHP版本下載相應(yīng)的opcache版本。比如PHP5.5:http://pecl.php.net/get/zendopcache-7.0.5.tgztar -zxvf zendopcache-7.0.5.tgzcd zendopcache-7.0.5phpize./configure --with-php-config=/usr/local/php/bin/php-configmakemake install這是會(huì)在php的擴(kuò)展文件夾內(nèi)生成opcache.soPHP7.0之后自帶opcache.so無(wú)需安裝

2、使用

 在php.ini加入zend_extension=opcache.so; 注意:這里是zend_extension不是extension,關(guān)于zend_extension和extension的區(qū)別可以去查閱 相關(guān)資料

3、配置

關(guān)于opcache的詳細(xì)參數(shù)配置比較核心的參數(shù)如下:opcache擴(kuò)展位置zend_extension=opcache.so啟用opcacheopcache.enable=1使用共享內(nèi)存大小opcache.memory_consumption=200字符串緩存大小opcache.interned_strings_buffer=8最大緩存文件數(shù)量opcache.max_accelerated_files=8000出現(xiàn)異常,立即釋放全部?jī)?nèi)存opcache.fast_shutdown=1最大允許占用內(nèi)存百分比,超過(guò)此限制會(huì)重啟進(jìn)程opcache.max_wasted_percentage=20如果置為1,則將當(dāng)前路徑加入到文件key中,以避免可能產(chǎn)生的同文件名的文件key沖突opcache.use_cwd=1文件檢測(cè)周期revalidate_freq=3600啟用文件緩存時(shí)間戳opcache.validate_timestamps=1

以上就是php中Opcache是什么?Opcache原理和使用的介紹的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注 其它相關(guān)文章!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 垦利县| 西林县| 泸水县| 建德市| 罗田县| 潼南县| 曲沃县| 德令哈市| 平果县| 庆阳市| 横山县| 乾安县| 闽侯县| 上林县| 唐河县| 奉化市| 普安县| 桂东县| 浦城县| 游戏| 新郑市| 阿巴嘎旗| 华宁县| 怀安县| 金坛市| 郁南县| 宁乡县| 离岛区| 明星| 临漳县| 武乡县| 新竹县| 稻城县| 蒙自县| 洪湖市| 故城县| 乳山市| 永年县| 阿尔山市| 金阳县| 合川市|