偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

PHP應用性能監(jiān)控實現原理

企業(yè)動態(tài)
自1994年創(chuàng)建以來,PHP早已由小家子氣的”Personal Home Page Tools”,演變?yōu)椤盤HP: Hypertext Preprocessor”,同時基于強大的可擴展性與敏捷迭代特性,基本已經成為互聯(lián)網科技公司的必備語言,為推動互聯(lián)網發(fā)展提供著源源不斷的強大動力。

一。PHP應用場景

自1994年創(chuàng)建以來,PHP早已由小家子氣的”Personal Home Page Tools”,演變?yōu)?rdquo;PHP: Hypertext Preprocessor”,同時基于強大的可擴展性與敏捷迭代特性,基本已經成為互聯(lián)網科技公司的必備語言,為推動互聯(lián)網發(fā)展提供著源源不斷的強大動力。

同時基于PHP的開源軟件和開發(fā)框架(優(yōu)秀如WordPress,Zend Framework,Laravel,Yaf,Hiphop等等)也在不斷地發(fā)展,使得PHP也被除互聯(lián)網公司之外的企業(yè)所大規(guī)模使用,而進入企業(yè)級應用開發(fā)語言之列。

二。用戶監(jiān)控需求

我們知道,PHP的門檻低迭代快使得很多項目,因為種種原因變得架構不清:

1.開發(fā)者水平不足;

2.項目是從外包團隊接手;

3.歷史問題,積重難返;

4.反正性能奇差,反正已經愈發(fā)不可控;

而要發(fā)現問題卻又因為各種原因不可或很難調試,這些原因諸如:

1. 時間太久了,我也忘了怎么寫的,要看代碼

2. 因為數據不可造,邏輯無法到達,不能重現

3. 項目不是我所在的團隊開發(fā),架構以及代碼,羞澀惡心。

[[158893]]

圖1: PHP應用系統(tǒng)的執(zhí)行模型

 

PHP的運行階段可以大致分成三個階段:

1.Parse

2.Compile

3.Execute

其中Compile過程將會產生Op Code和Class Table,Function Table,然后交給Execute最終執(zhí)行。Op Code是中間碼,被Zend Engine調用執(zhí)行。

不難看出,其實PHP與Java類似,都是產生中間碼,運行在各自的”虛機”上,可是為什么PHP的性能較Java、.NET、Go而言差別這么大呢?

一句話講,大家普遍認為的”PHP是解釋型語言”其實是不嚴謹的,PHP不是不編譯,而是每次執(zhí)行都編譯,除此之外最嚴重的問題即是較難實現并行運算(注意只說”較難”,使用PHP進行并行計算的方案不止一個)?;贠p Code的存在,已經誕生了大量cache工具擴展,可以有效提升PHP應用的執(zhí)行性能,如OpCache,Apc,Apcu,Xcache等等。

對于使用PHP開發(fā)的網站、接口、應用系統(tǒng)而言,性能的瓶頸點會在什么地方呢?  做過PHP應用性能優(yōu)化的朋友們都知道,遞歸、循環(huán)、資源操作、資源釋放等都是常見的瓶頸點,這些經常會造成阻塞或鎖。

可以得出CPU 、內存 、各種I/O、各種網絡帶寬等的消耗是性能瓶頸點中的重中之重,我們可以簡單歸結為:外部服務(如第三方API),資源讀寫,代碼異常。

處理這些問題的通用作法是使用Xhprof,Xdebug或PHP-trace等工具來找出,并配合架構師或高級工程師經驗來處理,方法包括單例、事務、按需加載、短事務、及時釋放等等(對于大多數公司與開發(fā)人員來講,碰到性能問題更多的作法是盲目的猜測與撓頭).但這些方法有哪些不足呢?

一眼可知,只能在測試或生產環(huán)境,產生問題并明確之后進行處理.測試環(huán)境還好,但如果是生產環(huán)境,事后處理雖能補救,但大多數面對的都是因功能受損造成的投訴或更嚴重的業(yè)務損失。

能夠在生產環(huán)境***時間發(fā)現或規(guī)避可能的性能問題;準確記錄已知或未知故障現場。這兩點,則成為應用性能管理的迫切需求。

三。透視寶PHP監(jiān)控實現原理

 

[[158894]]

圖2 Hook運用示意

PHP運行支撐的Zend Engine早在設計過程中已經預留了豐富的Hook,可以有效干涉處理過程中的幾個關鍵步驟。

云智慧透視寶PHPAgent的研發(fā)實現,當然不能影響應用系統(tǒng)原有的代碼,那么最簡單有效的方式必然是實現一個PHP擴展,PHPAgent利用了以下幾個Hook:

1.zend_compile_file & zend_compile_string

加載分析文件或字符串,本身就會造成非常大的IO,如果過多地執(zhí)行加載,無疑會造成內存和CPU的消耗.通過這兩個hook,可以取得文件名、執(zhí)行行數、使用內存和CPU占用時間。

2.zend_execute & zend_execute_internal

通過這兩個hook的使用,我們可以準確地分析得出一個PHP應用中的類調用、方法調用、方法參數、內存占用和CPU占用,加以分析,便可以準確得出應用系統(tǒng)運行過程中的方法運行棧,API調用地址,SQL語句,Cache Key以及Cache***等關鍵信息。

3.zend_throw_exception_hook

利用異常鉤子,可以準確地得到應用系統(tǒng)運行過程中出現的異常信息,當然包括異常發(fā)生的類\方法位置,參數,異常code和異常message

4.zend_error_cb

錯誤鉤子則更加直接,可以準確得到系統(tǒng)運行過程中出現的任何一個warning,代碼錯誤或語法錯誤。

 

[[158895]]

圖3 PHPAgent注冊與應用Hook流程

[[158896]]

圖4 zend_execute hook的應用示意(偽代碼)

上圖大致解釋了我們是如何運用zend_execute hook進行數據采集的: 先取得方法名,同時通過規(guī)則過濾引擎,判斷哪些是我們關注或不關注的(類\方法的黑白名單),然后通過AGENT_BEGIN宏記錄方法開始時間,方法名,行數,內存起點與參數,在執(zhí)行原有zend_execute之后,再通過AGENT_END宏記錄結束時間,內存止點。

通過上述Hook的應用,已經可以得到我們所關注的指標數據: 類\方法執(zhí)行順序,執(zhí)行時間,內存占用,接口\DB等資源連接,SQL語句和執(zhí)行時間等。

經過嚴格的壓力測試和生產環(huán)境部署實踐,PHPAgent對原有應用系統(tǒng)的性能影響在5%以內.經過一些參數調配,可以將性能影響降到更低,這些參數包括:

1.是否啟動異常鉤子

2.是否啟動錯誤鉤子

3.是否啟用數據采樣

4.是否啟用棧追蹤

5.是否使用黑白名單(URL\Header\Cookie\Request Params)

6.是否啟用UDP發(fā)送代理

7.關注請求時間響應閾值

8.關注方法時間響應閾值

四。透視寶PHPAgent監(jiān)控部署流程

透視寶PHPAgent遵守SmartAgent插件規(guī)范,那么一切從SmartAgent的安裝部署開始。

1、登錄云智慧透視寶官網:https://www.toushibao.com/ ,點擊頁面右上角導航的“免費試用”,正確填寫免費試用的申請信息后會彈出下面的對話框,同時激活郵件會自動發(fā)送到你的郵箱中,按照流程注冊帳號即可。

[[158897]]

2、注冊成功后,登錄透視寶,點擊配置-應用,在配置頁面中下載安裝Smart Agent。安裝成功后,Smart Agent會根據系統(tǒng)配置自動獲取主機信息,大致兩分鐘后,您就可以在“主機→服務器”模塊中查看該服務器的CPU、內存、網卡、磁盤及進程等性能數據。

[[158898]]

3、如果要監(jiān)控應用運行時代碼、主機中服務和數據庫性能數據,您需要進一步安裝和配置Smart Agent提供的各種插件,這是因為Smart Agent實現了一種開放式的插件式結構,對每個運行時代碼、服務和數據庫的監(jiān)控都是通過相應的插件來實現的。

[[158899]]

3。Smart Agent在安裝完成后,加載過程中自動發(fā)現你的應用組件,如果沒有自動監(jiān)測到PHP環(huán)境,也可以手動添加PHPAgent。如上圖所示,點擊“管理”入口,進入“插件管理”,點擊頁面下部的“添加服務”,選擇PHPAgent后,點擊“創(chuàng)建”。

創(chuàng)建完畢后,點擊“ON”。(該ON操作只是初始化用戶的信息,以便以后采集到的信息能夠正確的回傳給該用戶。)

4。當然,如果對于已經安裝完成的PHPAgent,也可以直接在此管理界面上方便地進行升級與降級操作。

[[158900]]5。安裝過程腳本默認會使用whereisphp尋找系統(tǒng)內PHP進行安裝。

如果編譯安裝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應用數據

恭喜!此時配置已經完成,如果應用有正常訪問進入,您就可以在“應用”模塊中查看應用數據了。

[[158901]]五。透視寶PHP監(jiān)控功能特點

在功能方面,透視寶無論是在PHP,還是其他如Java、.NET等主流語言的監(jiān)控上,都包括:查看執(zhí)行最慢的10個元素,包括元素執(zhí)行次數、持續(xù)時長和占用時長百分比;查看HTTP請求參數,包括請求的響應狀態(tài)、鏈接頁面、具體的請求參數及返回結果;查看代碼執(zhí)行堆棧的詳細樹狀信息,包括每個方法的計算時間、總耗時和被調用的次數,您能直接看到特殊標識的最慢方法;查看涉及SQL語句的總耗時排序,包括SQL執(zhí)行總耗時、執(zhí)行次數和具體的查詢語句;第三方API調用。

[[158902]]

上圖是PHPAgent發(fā)現的某應用的資源拓撲與請求響應概述。

[[158903]]

上圖以散點柱餅圖描述了某段時間內一個PHP應用的請求響應時間分布,可以一眼看出有問題的請求是哪些。

[[158904]]

對于某一個單次請求事務的拓撲與代碼運行??梢詼蚀_地進行分析:

 

 下面是對一個應用中PHPAgent發(fā)現的一段時間內對Mysql資源操作的分析。

 基于某一個集群的應用,透視寶可以自動進行總拓撲的識別和描繪。

  

 當然,可以對已經識別的應用站點拓撲進行分組高亮。

責任編輯:李英杰 來源: 51cto.com
相關推薦

2015-11-17 18:06:22

云智慧PHP應用性能

2013-08-22 10:15:32

應用性能監(jiān)控系統(tǒng)管理

2013-03-27 10:01:53

網絡應用檢測工具

2015-05-12 15:02:23

API應用性能監(jiān)控云智慧

2014-11-06 10:00:46

Gartner

2015-06-25 12:41:53

實時 Node應用性能監(jiān)測

2019-10-10 09:01:46

監(jiān)控服務器應用

2014-08-04 16:38:37

移動應用

2011-11-09 11:37:29

CA TechnoloGartner

2015-07-27 11:00:33

應用性能監(jiān)控工具APM

2015-12-11 11:39:15

.net代碼

2015-12-11 11:49:19

java

2021-08-09 16:39:52

工具JVM剖析

2015-03-11 15:08:25

2015WOT峰會應用性能監(jiān)控與管理

2011-11-09 12:28:06

CA Technolo領導者象限

2015-08-27 13:44:25

APM

2015-07-24 16:12:58

應用性能管理

2012-10-09 09:43:50

WLAN優(yōu)化無線局域網WLAN

2020-03-30 14:00:21

Flutter前端代碼

2023-07-19 15:45:47

ReactDOM輕量級
點贊
收藏

51CTO技術棧公眾號