欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

PHP加速器配置神器opcache怎么用-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)PHP加速器配置神器opcache怎么用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

創(chuàng)新互聯(lián)公司長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為穆棱企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè)穆棱網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

什么是opcode?

當(dāng)解釋器完成對腳本代碼的分析后,便將它們生成可以直接運(yùn)行的中間代碼,也稱為操作碼(Operate Code,opcode)。Opcode cache的目地是避免重復(fù)編譯,減少CPU和內(nèi)存開銷。如果動態(tài)內(nèi)容的性能瓶頸不在于CPU和內(nèi)存,而在于I/O操作,比如數(shù)據(jù)庫查詢帶來的磁盤I/O開銷,那么opcode cache的性能提升是非常有限的。但是既然opcode cache能帶來CPU和內(nèi)存開銷的降低,這總歸是好事。

為什么要使用opcode緩存?

這得從PHP代碼的生命周期說起,請求PHP腳本時,會經(jīng)過五個步驟,如下圖所示:
PHP加速器配置神器opcache怎么用

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

PHP opcode原理

Opcode是一種PHP腳本編譯后的中間語言,就像Java的ByteCode,或者.NET的MSL,舉個例子,比如你寫下了如下的PHP代碼:

< ?php
   echo "Hello World";
   $a = 1 + 1;
   echo $a;
?>

PHP執(zhí)行這段代碼會經(jīng)過如下4個步驟(確切的來說,應(yīng)該是PHP的語言引擎Zend)

1)Scanning(Lexing) ,將PHP代碼轉(zhuǎn)換為語言片段(Tokens)。
2)Parsing, 將Tokens轉(zhuǎn)換成簡單而有意義的表達(dá)式。
3)Compilation, 將表達(dá)式編譯成Opocdes。
4)Execution, 順次執(zhí)行Opcodes,每次一條,從而實(shí)現(xiàn)PHP腳本的功能。

PHP opcache介紹

Optimizer+(Optimizer+于2013年3月中旬改名為Opcache),OPcache通過將PHP腳本預(yù)編譯的字節(jié)碼存儲到共享內(nèi)存中來提升PHP的性能,存儲預(yù)編譯字節(jié)碼的好處就是省去了每次加載和解析PHP腳本的開銷。

PHP 5.5.0 及后續(xù)版本中已經(jīng)綁定了 OPcache 擴(kuò)展。 對于 PHP 5.2,5.3 和 5.4 版本可以使用 ? PECL擴(kuò)展中的OPcache庫。

PHP 5.5.0及后續(xù)版本

OPcache只能編譯為共享擴(kuò)展。如果你使用–disable-all參數(shù)禁用了默認(rèn)擴(kuò)展的構(gòu)建,那么必須使用–enable-opcache選項(xiàng)來開啟OPcache。編譯之后,就可以使用 zend_extension 指令來將 OPcache 擴(kuò)展加載到 PHP 中。

推薦的php.ini設(shè)置

使用下列推薦設(shè)置來獲得較好的性能:

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.save_comments=0

你也可以禁用 opcache.save_comments 并且啟用 opcache.enable_file_override。 需要提醒的是,在生產(chǎn)環(huán)境中使用上述配置之前,必須經(jīng)過嚴(yán)格測試。 因?yàn)樯鲜雠渲么嬖谝粋€已知問題,它會引發(fā)一些框架和應(yīng)用的異常, 尤其是在存在文檔使用了備注注解的時候。

以下是opcache的配置說明,其中給有值得都是默認(rèn)配置:

; opcache的開關(guān),關(guān)閉時代碼不再優(yōu)化.
opcache.enable=1
 
; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1
 
; OPcache的共享內(nèi)存大小,以兆字節(jié)為單位。總共能夠存儲多少預(yù)編譯的PHP代碼(單位:MB)
; 推薦128
opcache.memory_consumption=64
 
; 用來存儲臨時字符串的內(nèi)存大小,以兆字節(jié)為單位.
; 推薦8
opcache.interned_strings_buffer=4
 
; 大緩存的文件數(shù)目200到100000之間.
; 推薦4000
opcache.max_accelerated_files=2000
 
; 內(nèi)存"浪費(fèi)"達(dá)到此值對應(yīng)的百分比,就會發(fā)起一個重啟調(diào)度.
opcache.max_wasted_percentage=5
 
; 開啟這條指令, Zend Optimizer + 會自動將當(dāng)前工作目錄的名字追加到腳本鍵上,以此消除同名文件間的鍵值命名沖突.關(guān)閉這條指令會提升性能,但是會對已存在的應(yīng)用造成破壞.
opcache.use_cwd=0
 
; 開啟文件時間戳驗(yàn)證
opcache.validate_timestamps=1
 
; 檢查腳本時間戳是否有更新的周期,以秒為單位。設(shè)置為0會導(dǎo)致針對每個請求,OPcache都會檢查腳本更新.
; 推薦60
opcache.revalidate_freq=2
 
; 允許或禁止在include_path中進(jìn)行文件搜索的優(yōu)化.
opcache.revalidate_path=0
 
; 如果禁用,腳本文件中的注釋內(nèi)容將不會被包含到操作碼緩存文件,這樣可以有效減小優(yōu)化后的文件體積,禁用此配置指令可能會導(dǎo)致一些依賴注釋或注解的應(yīng)用或框架無法正常工作,比如:Doctrine,Zend Framework2等.
; 推薦0
opcache.save_comments=1
 
; 如果禁用,則即使文件中包含注釋,也不會加載這些注釋內(nèi)容。本選項(xiàng)可以和opcache.save_comments一起使用,以實(shí)現(xiàn)按需加載注釋內(nèi)容.
opcache.load_comments=1
; 打開快速關(guān)閉,打開這個在PHP Request Shutdown的時候會收內(nèi)存的速度會提高.
; 推薦1
opcache.fast_shutdown=1
 
; 允許覆蓋文件存在(file_exists等)的優(yōu)化特性.
opcache.enable_file_override=0 
 
; 定義啟動多少個優(yōu)化過程.
opcache.optimization_level=0xffffffff
 
; 啟用此Hack可以暫時性的解決"can’t redeclare class"錯誤.
opcache.inherited_hack=1
 
; 啟用此Hack可以暫時性的解決"can’t redeclare class"錯誤.
;opcache.dups_fix=0
 
; 通過文件大小屏除大文件的緩存,默認(rèn)情況下所有的文件都會被緩存.
;opcache.max_file_size=0
 
; 每N次請求檢查一次緩存校驗(yàn).默認(rèn)值0表示檢查被禁用了,由于計(jì)算校驗(yàn)值有損性能,這個指令應(yīng)當(dāng)緊緊在開發(fā)調(diào)試的時候開啟.
;opcache.consistency_checks=0
 
; 從緩存不被訪問后,等待多久后(單位為秒)調(diào)度重啟.
;opcache.force_restart_timeout=180
 
; 日志記錄level,默認(rèn)只有fatal error和error.
;opcache.error_log=
 
; 將錯誤信息寫入到服務(wù)器(Apache等)日志
;opcache.log_verbosity_level=1
 
; 內(nèi)存共享的選后臺.留空則是讓系統(tǒng)選擇.
;opcache.preferred_memory_model=
 
; 運(yùn)行php腳本時保護(hù)共享內(nèi)存防止意外的寫入,只對debug時有用.
;opcache.protect_memory=0

最后說一下使用opcache加速php時應(yīng)該注意的坑:

opcache依靠的是PHP文件的modify time作為文件被修改的檢測條件,基于這個會引發(fā)兩個問題。

第一個問題是做版本回滾時,由于版本回滾后的文件修改時間比現(xiàn)有opcache緩存的文件時間要往前一些,所以可能會導(dǎo)致opcache不會清除緩存,需要手動reload。

第二個問題是做版本發(fā)布時,一般都是sync方式,可能會出現(xiàn)文件發(fā)布一半時被opcache緩存,用戶訪問會報(bào)程序錯誤,這個主要是因?yàn)槲募?nèi)容緩存了一半,但是文件的時間戳不會在改變,所以就算opcache檢測時也不會去讀取新的文件了,需要手動reload。

針對這兩個問題,不光reload可以解決,同樣調(diào)用opcache的接口也可以清除opcache緩存。

你可以使用opcache_reset()或者或者opcache_invalidate()函數(shù)來手動重置OPcache。

opcache_reset():該函數(shù)將重置整個字節(jié)碼緩存,在調(diào)用opcache_reset()之后,所有的腳本將會重新載入并且在下次被點(diǎn)擊的時候重新解析。

opcache_invalidate():該函數(shù)的作用是使得指定腳本的字節(jié)碼緩存失效。 如果force沒有設(shè)置或者傳入的是FALSE,那么只有當(dāng)腳本的修改時間 比對應(yīng)字節(jié)碼的時間更新,腳本的緩存才會失效。

但是不推薦使用,個人在生產(chǎn)環(huán)境中進(jìn)行代碼發(fā)布后調(diào)用opcache_reset()清空緩存(測試確實(shí)可以清空緩存),出現(xiàn)過奇葩問題(訪問量大的應(yīng)用),后來就果斷放棄了,使用了reload的方式。

關(guān)于PHP加速器配置神器opcache怎么用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)頁名稱:PHP加速器配置神器opcache怎么用-創(chuàng)新互聯(lián)
URL地址:http://www.chinadenli.net/article36/dcdhpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)網(wǎng)站收錄微信公眾號ChatGPT虛擬主機(jī)做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)