摘要:什么是當(dāng)解釋器完成對(duì)腳本代碼的分析后,便將它們生成可以直接運(yùn)行的中間代碼,也稱為操作碼,。的目地是避免重復(fù)編譯,減少和內(nèi)存開銷。這將帶來顯著的性能加速,通常特別是高流量和高并發(fā)量時(shí)降低了整體服務(wù)器的內(nèi)存消耗,而且很少有缺點(diǎn)。
一、個(gè)人實(shí)踐發(fā)現(xiàn)opcache
最近為了應(yīng)對(duì)雙十一期間高流量的沖擊,小編通過壓力測(cè)試去查找服務(wù)器性能瓶頸,發(fā)現(xiàn)100并發(fā)時(shí),QPS
并不是很高,但CPU和內(nèi)存消耗特別高,尤其是CPU消耗都100%了,而我們的容器和服務(wù)器配置都差不多升級(jí)到頂級(jí)了,這不是如此好的服務(wù)器該發(fā)揮的效果,于是小編進(jìn)行了一次全面排查:
查看接口中數(shù)據(jù)庫查詢部分,該部分做了緩存,且redis的消耗并不是很高,排除數(shù)據(jù)庫和緩存的影響性能因素;
查看有沒有其他外部調(diào)用影響性能,發(fā)現(xiàn)這部分獲取數(shù)據(jù)僅僅是通過數(shù)據(jù)庫和緩存,因此排除;
查看接口程序代碼中有沒有復(fù)雜的邏輯計(jì)算,發(fā)現(xiàn)該部分處理的數(shù)據(jù)處理完了就直接緩存起來了,一段時(shí)間內(nèi)數(shù)據(jù)來源都是redis緩存,因此排除
既然已上可能造成接口瓶頸的因此都排除了,那么最有可能的是現(xiàn)在使用的laravel5.0框架造成接口性能如此低下,然后通過框架文檔、源碼及網(wǎng)上資料等發(fā)現(xiàn)laravel框架在運(yùn)行時(shí)會(huì)加載大量框架文件,然后對(duì)這些文件進(jìn)行編譯造成服務(wù)器CPU消耗特別高。通過這個(gè)方向,小編發(fā)現(xiàn)了PHP一個(gè)不錯(cuò)的緩存PHP編譯文件的擴(kuò)展opcache。
二、opcache的原理
Opcache是什么?
Opcache是一種通過將解析的PHP腳本預(yù)編譯的字節(jié)碼(Operate Code)存放在共享內(nèi)存中來避免每次加載和解析PHP腳本的開銷,解析器可以直接從共享內(nèi)存讀取已經(jīng)緩存的字節(jié)碼(Operate Code),從而大大提高PHP的執(zhí)行效率。
什么是Operate Code?
當(dāng)解釋器完成對(duì)腳本代碼的分析后,便將它們生成可以直接運(yùn)行的中間代碼,也稱為操作碼(Operate Code,opcode)。Opcode cache的目地是避免重復(fù)編譯,減少CPU和內(nèi)存開銷。如果動(dòng)態(tài)內(nèi)容的性能瓶頸不在于CPU和內(nèi)存,而在于I/O操作,比如數(shù)據(jù)庫查詢帶來的磁盤I/O開銷,那么opcode cache的性能提升是非常有限的。但是既然opcode cache能帶來CPU和內(nèi)存開銷的降低,這總歸是好事。現(xiàn)代操作碼緩存器(Optimizer+,APC2.0+,其他)使用共享內(nèi)存進(jìn)行存儲(chǔ),并且可以直接從中執(zhí)行文件,而不用在執(zhí)行前“反序列化”代碼。這將帶來顯著的性能加速,通常特別是高流量和高并發(fā)量時(shí)降低了整體服務(wù)器的內(nèi)存消耗,而且很少有缺點(diǎn)。
為什么要使用Opcode緩存?
這得從PHP代碼的生命周期說起,請(qǐng)求PHP腳本時(shí),會(huì)經(jīng)過五個(gè)步驟,如下圖所示:
Zend引擎必須從文件系統(tǒng)讀取文件、掃描其詞典和表達(dá)式、解析文件、創(chuàng)建要執(zhí)行的計(jì)算機(jī)代碼(稱為Opcode),最后執(zhí)行Opcode。每一次請(qǐng)求PHP腳本都會(huì)執(zhí)行一遍以上步驟,如果PHP源代碼沒有變化,那么Opcode也不會(huì)變化,顯然沒有必要每次都重行生成Opcode,結(jié)合在Web中無所不在的緩存機(jī)制,我們可以把Opcode緩存下來,以后直接訪問緩存的Opcode豈不是更快,啟用Opcode緩存之后的流程圖如下所示:
因此使用了Operate Code緩存之后,PHP代碼會(huì)直接獲取opcode后直接執(zhí)行,中間的三個(gè)步驟會(huì)省略掉因此會(huì)大幅提高PHP代碼執(zhí)行效率三、Opcache的安裝和使用
安裝
當(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.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 這是會(huì)在php的擴(kuò)展文件夾內(nèi)生成opcache.so PHP7.0之后自帶opcache.so無需安裝
使用
在php.ini加入zend_extension=opcache.so; 注意:這里是zend_extension不是extension,關(guān)于zend_extension和extension的區(qū)別可以去查閱 相關(guān)資料
配置
關(guān)于opcache的詳細(xì)參數(shù)配置小編沒怎么研究,針對(duì)比較核心的參數(shù)如下: opcache擴(kuò)展位置 zend_extension=opcache.so 啟用opcache opcache.enable=1 使用共享內(nèi)存大小 opcache.memory_consumption=200 字符串緩存大小 opcache.interned_strings_buffer=8 最大緩存文件數(shù)量 opcache.max_accelerated_files=8000 出現(xiàn)異常,立即釋放全部內(nèi)存 opcache.fast_shutdown=1 最大允許占用內(nèi)存百分比,超過此限制會(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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/29688.html
摘要:大家知道目前的緩存插件一般有三個(gè),但未來它們可能都會(huì)消失,因?yàn)橐呀?jīng)集成,功能和前三者相似但又有少許不同,緩存速度據(jù)說比它們更快。下面是在本人虛擬機(jī)的環(huán)境下安裝過程,記錄一下。之后修改添加如下內(nèi)容最后重啟即可。 大家知道目前PHP的緩存插件一般有三個(gè):APC、eAccelerator、XCache,但未來它們可能都會(huì)消失,因?yàn)镻HP 5.5已經(jīng)集成Zend Opcache,功能和前三者相...
摘要:如需要支持熱啟動(dòng),請(qǐng)自行谷歌,大概原理就是用監(jiān)控文件變更,如果更新了重啟如果正式環(huán)境中還可以自己寫個(gè)部署腳本,后重啟服務(wù)等,方法很多不一一列舉。 1 Laravel的速度瓶頸在哪? 1.1 已有的一些優(yōu)化方法 1.1.1 laravel官方提供了一些優(yōu)化laravel的優(yōu)化方法 php artisan optimize php artisan config:cache php arti...
摘要:來自博客整理于面試別人或被別人面試的一些題目持續(xù)更新答案網(wǎng)上基本都有,不一一列舉。例有個(gè)人去游玩,需要買水,商店活動(dòng)買瓶贈(zèng)送一瓶。請(qǐng)問題目至少需要買多少瓶飲料才可以人手一瓶前端方面前端性能團(tuán)隊(duì)總結(jié)的條黃金定律說出幾條 來自 AT博客整理于面試別人或被別人面試的一些題目(持續(xù)更新),答案網(wǎng)上基本都有,不一一列舉。希望能幫到需要換工作的你。 數(shù)據(jù)庫 mysql 索引的理解 mysql b...
摘要:來自博客整理于面試別人或被別人面試的一些題目持續(xù)更新答案網(wǎng)上基本都有,不一一列舉。例有個(gè)人去游玩,需要買水,商店活動(dòng)買瓶贈(zèng)送一瓶。請(qǐng)問題目至少需要買多少瓶飲料才可以人手一瓶前端方面前端性能團(tuán)隊(duì)總結(jié)的條黃金定律說出幾條 來自 AT博客整理于面試別人或被別人面試的一些題目(持續(xù)更新),答案網(wǎng)上基本都有,不一一列舉。希望能幫到需要換工作的你。 數(shù)據(jù)庫 mysql 索引的理解 mysql b...
閱讀 3610·2021-11-23 09:51
閱讀 1482·2021-11-04 16:08
閱讀 3554·2021-09-02 09:54
閱讀 3620·2019-08-30 15:55
閱讀 2601·2019-08-30 15:54
閱讀 963·2019-08-29 16:30
閱讀 2051·2019-08-29 16:15
閱讀 2322·2019-08-29 14:05