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