云智慧 Neeke
創(chuàng)新互聯(lián)是專業(yè)的雞冠網(wǎng)站建設(shè)公司,雞冠接單;提供網(wǎng)站建設(shè)、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行雞冠網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
一。PHP應(yīng)用場景
自1994年創(chuàng)建以來,PHP早已由小家子氣的”Personal Home Page Tools”,演變?yōu)椤盤HP: Hypertext Preprocessor”,同時基于強大的可擴(kuò)展性與敏捷迭代特性,基本已經(jīng)成為互聯(lián)網(wǎng)科技公司的必備語言,為推動互聯(lián)網(wǎng)發(fā)展提供著源源不斷的強大動力。
同時基于PHP的開源軟件和開發(fā)框架(優(yōu)秀如WordPress,Zend Framework,Laravel,Yaf,Hiphop等等)也在不斷地發(fā)展,使得PHP也被除互聯(lián)網(wǎng)公司之外的企業(yè)所大規(guī)模使用,而進(jìn)入企業(yè)級應(yīng)用開發(fā)語言之列。
二。用戶監(jiān)控需求
我們知道,PHP的門檻低迭代快使得很多項目,因為種種原因變得架構(gòu)不清:
1. 開發(fā)者水平不足;
2. 項目是從外包團(tuán)隊接手;
3. 歷史問題,積重難返;
4. 反正性能奇差,反正已經(jīng)愈發(fā)不可控;
而要發(fā)現(xiàn)問題卻又因為各種原因不可或很難調(diào)試,這些原因諸如:
1. 時間太久了,我也忘了怎么寫的,要看代碼
2. 因為數(shù)據(jù)不可造,邏輯無法到達(dá),不能重現(xiàn)
3. 項目不是我所在的團(tuán)隊開發(fā),架構(gòu)以及代碼,羞澀惡心。
圖1: PHP應(yīng)用系統(tǒng)的執(zhí)行模型
PHP的運行階段可以大致分成三個階段:
1. Parse
2. Compile
3. Execute
其中Compile過程將會產(chǎn)生Op Code和Class Table,F(xiàn)unction Table,然后交給Execute最終執(zhí)行。Op Code是中間碼,被Zend Engine調(diào)用執(zhí)行。
不難看出,其實PHP與Java類似,都是產(chǎn)生中間碼,運行在各自的”虛機(jī)”上,可是為什么PHP的性能較Java、.NET、Go而言差別這么大呢?
一句話講,大家普遍認(rèn)為的”PHP是解釋型語言”其實是不嚴(yán)謹(jǐn)?shù)?,PHP不是不編譯,而是每次執(zhí)行都編譯,除此之外最嚴(yán)重的問題即是較難實現(xiàn)并行運算(注意只說”較難”,使用PHP進(jìn)行并行計算的方案不止一個)?;贠p Code的存在,已經(jīng)誕生了大量cache工具擴(kuò)展,可以有效提升PHP應(yīng)用的執(zhí)行性能,如OpCache,Apc,Apcu,Xcache等等。
對于使用PHP開發(fā)的網(wǎng)站、接口、應(yīng)用系統(tǒng)而言,性能的瓶頸點會在什么地方呢? 做過PHP應(yīng)用性能優(yōu)化的朋友們都知道,遞歸、循環(huán)、資源操作、資源釋放等都是常見的瓶頸點,這些經(jīng)常會造成阻塞或鎖。
可以得出CPU 、內(nèi)存 、各種I/O、各種網(wǎng)絡(luò)帶寬等的消耗是性能瓶頸點中的重中之重,我們可以簡單歸結(jié)為:外部服務(wù)(如第三方API),資源讀寫,代碼異常。
處理這些問題的通用作法是使用Xhprof,Xdebug或PHP-trace等工具來找出,并配合架構(gòu)師或高級工程師經(jīng)驗來處理,方法包括單例、事務(wù)、按需加載、短事務(wù)、及時釋放等等(對于大多數(shù)公司與開發(fā)人員來講,碰到性能問題更多的作法是盲目的猜測與撓頭).但這些方法有哪些不足呢?
一眼可知,只能在測試或生產(chǎn)環(huán)境,產(chǎn)生問題并明確之后進(jìn)行處理.測試環(huán)境還好,但如果是生產(chǎn)環(huán)境,事后處理雖能補救,但大多數(shù)面對的都是因功能受損造成的投訴或更嚴(yán)重的業(yè)務(wù)損失。
能夠在生產(chǎn)環(huán)境第一時間發(fā)現(xiàn)或規(guī)避可能的性能問題;準(zhǔn)確記錄已知或未知故障現(xiàn)場。這兩點,則成為應(yīng)用性能管理的迫切需求。
三。透視寶PHP監(jiān)控實現(xiàn)原理
圖2 Hook運用示意
PHP運行支撐的Zend Engine早在設(shè)計過程中已經(jīng)預(yù)留了豐富的Hook,可以有效干涉處理過程中的幾個關(guān)鍵步驟。
云智慧透視寶PHPAgent的研發(fā)實現(xiàn),當(dāng)然不能影響應(yīng)用系統(tǒng)原有的代碼,那么最簡單有效的方式必然是實現(xiàn)一個PHP擴(kuò)展,PHPAgent利用了以下幾個Hook:
1. zend_compile_file & zend_compile_string
加載分析文件或字符串,本身就會造成非常大的IO,如果過多地執(zhí)行加載,無疑會造成內(nèi)存和CPU的消耗.通過這兩個hook,可以取得文件名、執(zhí)行行數(shù)、使用內(nèi)存和CPU占用時間。
2. zend_execute & zend_execute_internal
通過這兩個hook的使用,我們可以準(zhǔn)確地分析得出一個PHP應(yīng)用中的類調(diào)用、方法調(diào)用、方法參數(shù)、內(nèi)存占用和CPU占用,加以分析,便可以準(zhǔn)確得出應(yīng)用系統(tǒng)運行過程中的方法運行棧,API調(diào)用地址,SQL語句,Cache Key以及Cache命中等關(guān)鍵信息。
3. zend_throw_exception_hook
利用異常鉤子,可以準(zhǔn)確地得到應(yīng)用系統(tǒng)運行過程中出現(xiàn)的異常信息,當(dāng)然包括異常發(fā)生的類\方法位置,參數(shù),異常code和異常message。
4. zend_error_cb
錯誤鉤子則更加直接,可以準(zhǔn)確得到系統(tǒng)運行過程中出現(xiàn)的任何一個warning,代碼錯誤或語法錯誤。
圖3 PHPAgent注冊與應(yīng)用Hook流程
圖4 zend_execute hook的應(yīng)用示意(偽代碼)
上圖大致解釋了我們是如何運用zend_execute hook進(jìn)行數(shù)據(jù)采集的: 先取得方法名,同時通過規(guī)則過濾引擎,判斷哪些是我們關(guān)注或不關(guān)注的(類\方法的黑白名單),然后通過AGENT_BEGIN宏記錄方法開始時間,方法名,行數(shù),內(nèi)存起點與參數(shù),在執(zhí)行原有zend_execute之后,再通過AGENT_END宏記錄結(jié)束時間,內(nèi)存止點。
通過上述Hook的應(yīng)用,已經(jīng)可以得到我們所關(guān)注的指標(biāo)數(shù)據(jù): 類\方法執(zhí)行順序,執(zhí)行時間,內(nèi)存占用,接口\DB等資源連接,SQL語句和執(zhí)行時間等。
經(jīng)過嚴(yán)格的壓力測試和生產(chǎn)環(huán)境部署實踐,PHPAgent對原有應(yīng)用系統(tǒng)的性能影響在5%以內(nèi).經(jīng)過一些參數(shù)調(diào)配,可以將性能影響降到更低,這些參數(shù)包括:
1. 是否啟動異常鉤子
2. 是否啟動錯誤鉤子
3. 是否啟用數(shù)據(jù)采樣
4. 是否啟用棧追蹤
5. 是否使用黑白名單(URL\Header\Cookie\Request Params)
6. 是否啟用UDP發(fā)送代理
7. 關(guān)注請求時間響應(yīng)閾值
8. 關(guān)注方法時間響應(yīng)閾值
四。透視寶PHPAgent監(jiān)控部署流程
透視寶PHPAgent遵守SmartAgent插件規(guī)范,那么一切從SmartAgent的安裝部署開始。
1、登錄云智慧透視寶官網(wǎng):https://www.toushibao.com/ ,點擊頁面右上角導(dǎo)航的“免費試用”,正確填寫免費試用的申請信息后會彈出下面的對話框,同時激活郵件會自動發(fā)送到你的郵箱中,按照流程注冊帳號即可。
2、注冊成功后,登錄透視寶,點擊配置-應(yīng)用,在配置頁面中下載安裝Smart Agent。安裝成功后,Smart Agent會根據(jù)系統(tǒng)配置自動獲取主機(jī)信息,大致兩分鐘后,您就可以在“主機(jī)→服務(wù)器”模塊中查看該服務(wù)器的CPU、內(nèi)存、網(wǎng)卡、磁盤及進(jìn)程等性能數(shù)據(jù)。
3、如果要監(jiān)控應(yīng)用運行時代碼、主機(jī)中服務(wù)和數(shù)據(jù)庫性能數(shù)據(jù),您需要進(jìn)一步安裝和配置Smart Agent提供的各種插件,這是因為Smart Agent實現(xiàn)了一種開放式的插件式結(jié)構(gòu),對每個運行時代碼、服務(wù)和數(shù)據(jù)庫的監(jiān)控都是通過相應(yīng)的插件來實現(xiàn)的。
3。Smart Agent在安裝完成后,加載過程中自動發(fā)現(xiàn)你的應(yīng)用組件,如果沒有自動監(jiān)測到PHP環(huán)境,也可以手動添加PHPAgent。如上圖所示,點擊“管理”入口,進(jìn)入“插件管理”,點擊頁面下部的“添加服務(wù)”,選擇PHPAgent后,點擊“創(chuàng)建”。
創(chuàng)建完畢后,點擊“ON”。(該ON操作只是初始化用戶的信息,以便以后采集到的信息能夠正確的回傳給該用戶。)
4。當(dāng)然,如果對于已經(jīng)安裝完成的PHPAgent,也可以直接在此管理界面上方便地進(jìn)行升級與降級操作。
5。安裝過程腳本默認(rèn)會使用whereisphp尋找系統(tǒng)內(nèi)PHP進(jìn)行安裝。
如果編譯安裝PHP,請賦腳本中APPD_PHP_PATH變量值到PHP bin目錄,如: /usr/local/php-5.5.14/bin。
執(zhí)行PHPAgent/install.sh start安裝命令。
6。重啟Web Server
安裝開啟PHP代碼監(jiān)控插件后,需要您手動重啟web Server(apache\httpd\Php-fpm等軟件)
7。查看PHP應(yīng)用數(shù)據(jù)
恭喜!此時配置已經(jīng)完成,如果應(yīng)用有正常訪問進(jìn)入,您就可以在“應(yīng)用”模塊中查看應(yīng)用數(shù)據(jù)了。
五。透視寶PHP監(jiān)控功能特點
在功能方面,透視寶無論是在PHP,還是其他如Java、.NET等主流語言的監(jiān)控上,都包括:查看執(zhí)行最慢的10個元素,包括元素執(zhí)行次數(shù)、持續(xù)時長和占用時長百分比;查看HTTP請求參數(shù),包括請求的響應(yīng)狀態(tài)、鏈接頁面、具體的請求參數(shù)及返回結(jié)果;查看代碼執(zhí)行堆棧的詳細(xì)樹狀信息,包括每個方法的計算時間、總耗時和被調(diào)用的次數(shù),您能直接看到特殊標(biāo)識的最慢方法;查看涉及SQL語句的總耗時排序,包括SQL執(zhí)行總耗時、執(zhí)行次數(shù)和具體的查詢語句;第三方API調(diào)用。
上圖是PHPAgent發(fā)現(xiàn)的某應(yīng)用的資源拓?fù)渑c請求響應(yīng)概述。
上圖以散點柱餅圖描述了某段時間內(nèi)一個PHP應(yīng)用的請求響應(yīng)時間分布,可以一眼看出有問題的請求是哪些。
對于某一個單次請求事務(wù)的拓?fù)渑c代碼運行??梢詼?zhǔn)確地進(jìn)行分析:
下面是對一個應(yīng)用中PHPAgent發(fā)現(xiàn)的一段時間內(nèi)對MySQL資源操作的分析。
基于某一個集群的應(yīng)用,透視寶可以自動進(jìn)行總拓?fù)涞淖R別和描繪。
當(dāng)然,可以對已經(jīng)識別的應(yīng)用站點拓?fù)溥M(jìn)行分組高亮。
分享名稱:云智慧透視寶PHP應(yīng)用性能監(jiān)控實現(xiàn)原理
網(wǎng)址分享:http://chinadenli.net/article14/jiiige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、App設(shè)計、ChatGPT、云服務(wù)器、營銷型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)