透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理_第1頁(yè)
透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理_第2頁(yè)
透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理_第3頁(yè)
透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理_第4頁(yè)
透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理―、Java平臺(tái)體系及應(yīng)用場(chǎng)景從1995年SunMicrosystems公司正式推出Java,到2006年時(shí)Sun公司將其開源,迄今為止已經(jīng)有了20年的歷史。Java本身已不僅僅只是一門面向?qū)ο蟮木幊陶Z言,而是由一系列計(jì)算機(jī)軟件和規(guī)范形成的技術(shù)體系這個(gè)技術(shù)體系提供了完整的跨平臺(tái)開發(fā)與部署的支持,實(shí)現(xiàn)"一次編寫、到處運(yùn)行"的目的。Java已經(jīng)廣泛的應(yīng)用于嵌入式、移動(dòng)終端、企業(yè)服務(wù)器、大型機(jī)等各種場(chǎng)合。Sun官方所定義的Java技術(shù)體系包括如下幾個(gè)組成部分:Java程序設(shè)計(jì)語言*各種硬件平臺(tái)上的Java虛擬機(jī)Class文件格式*來自商業(yè)機(jī)構(gòu)和開源社區(qū)的第三方Java類庫(kù)IntenrationLibrariesOtherRafeLibrarieslanciandutilBo昶LibrariesJamvirtuniHciuni館JavaLanguagejavajavacjavadocjarjavapJPDAJConsoleJavaVisualVMJMCJFRJavaDBInt'lJVMTlIDLDeploySecurityTrouble3hootScriptingWebSeirvicBSRMIIJavaWebStartApplet7JavaPluig-inJavaLanaua:IntenrationLibrariesOtherRafeLibrarieslanciandutilBo昶LibrariesJamvirtuniHciuni館JavaLanguagejavajavacjavadocjarjavapJPDAJConsoleJavaVisualVMJMCJFRJavaDBInt'lJVMTlIDLDeploySecurityTrouble3hootScriptingWebSeirvicBSRMIIJavaWebStartApplet7JavaPluig-inJavaLanaua:i乜Tools&loolAPIsSwingJavii2DAWTAccessibilrtyDragandDropInputMethodsImageI/OPrintServiceSoundUserInterfaceToolkits■JavaFXScriptingB?ansiiirisupportIllpUt/OUlplltJMXJDBCJNDIRMI-IOPIDLJNIMathNetworkEngoverrideMechanismsecurityserializationExtensionMechanismXMLJAXPJavaSE

APIlangandutilCollectionsConcurrencyUtilitiesJARLoggingReflectionManagementPreferencesAPIRefObjectsRegularExpressionsversioningJavaHotSp&tVM圖:Java技術(shù)體系組件圖JavaVirtualMachine(JVM)是Java體系的基礎(chǔ),負(fù)責(zé)解釋、編譯執(zhí)行.class文件形式的字節(jié)碼,同時(shí)負(fù)責(zé)內(nèi)存管理、熱點(diǎn)代碼檢測(cè)和運(yùn)行時(shí)編譯優(yōu)化。正是由于有了虛擬機(jī)的基礎(chǔ),才使Java實(shí)現(xiàn)了"一次編寫、到處運(yùn)行”Java這20年的發(fā)展,其實(shí)更是虛擬機(jī)的發(fā)展過程。期間經(jīng)歷了Sun、BEA公司各自開發(fā)的虛擬機(jī),2009年之后,ORACLE將這兩家公司收購(gòu),并將這些虛擬機(jī)取長(zhǎng)補(bǔ)短、合二為一。目前還是開源的虛擬機(jī)OpenJDK,可供愛好者學(xué)習(xí)研究用。JRE部分是支持Java程序運(yùn)行的標(biāo)準(zhǔn)環(huán)境。JDK是JRE的超集,包含JRE的一切,再加上工具如編譯器、調(diào)試器等。二、Java性能監(jiān)控需求對(duì)于一個(gè)企業(yè)的應(yīng)用系統(tǒng),大多數(shù)情況下,肯定是由多種編程語言開發(fā)的各種系統(tǒng)的集成。我們都非常關(guān)心系統(tǒng)的可用性、及時(shí)響應(yīng)性、資源的消耗,比如CPU、內(nèi)存、各種I/O、網(wǎng)路帶寬等消耗情況。對(duì)于這些問題的性能瓶頸點(diǎn),我們一般可以歸納為外部服務(wù)(如第三方API)、資源讀寫、代碼異常如果在發(fā)生這些問題時(shí),能夠及時(shí)完整的抓拍記錄保留下來,那么對(duì)于我們解決問題將會(huì)提供充足的證據(jù),解決問題會(huì)變的非常容易。對(duì)于Java應(yīng)用系統(tǒng)來說,JVM自身提供了相應(yīng)的性能監(jiān)控手段和工具,經(jīng)常在出現(xiàn)問題后,比如內(nèi)存泄漏或溢出時(shí),我們會(huì)通過jmap命令導(dǎo)出堆的轉(zhuǎn)儲(chǔ)快照,利用相應(yīng)的命令jhat或其他相應(yīng)的第三方內(nèi)存分析工具來分析對(duì)象的占用情況。響應(yīng)緩慢時(shí),我們可能會(huì)用jstat監(jiān)視命令、或jdk的可視化工具jconsole、visualvm來分析JVM的垃圾回收類型、回收頻率,來推測(cè)是否是垃圾回收導(dǎo)致的。有可能我們還要接著分析線程轉(zhuǎn)儲(chǔ)快照,通過jstack取出線程的棧快照,來分析是否有真死鎖、死循環(huán)導(dǎo)致的相應(yīng)緩慢、資源負(fù)載高等情況。

當(dāng)有問題出現(xiàn)時(shí),許多開發(fā)人員可能都是比較盲目的用這些工具來試探性定位問題,而大多數(shù)情況下,這種試探會(huì)無功而返。因?yàn)檫@些分析工具主要是側(cè)重Java單方面的分析,比如該系統(tǒng)調(diào)用第三方API,如果第三方API有問題,是無法監(jiān)控到的。還有像文件、DB資源的訪問也是是無法監(jiān)控到的。而且,只有對(duì)Java虛擬機(jī)機(jī)制較為熟悉的高級(jí)開發(fā)人員才能比較好的運(yùn)用、理解這些工具,對(duì)于大多數(shù)普通Java開發(fā)人員來說,這些問題只會(huì)令他們束手無策。像外部服務(wù)(如第三方API)、資源讀寫、代碼異常這些瓶頸點(diǎn),需要通過代碼級(jí)別的監(jiān)控才能直接、快速、有效的找到癥結(jié)所在。調(diào)用第三方API的耗時(shí)、資源訪問的耗時(shí)、代碼拋出的非預(yù)知異常,這些常見問題代碼監(jiān)控完全能夠監(jiān)控到,并能夠?qū)崟r(shí)抓拍記錄,一旦有問題可以快速還原事故問題現(xiàn)場(chǎng)。通過代碼級(jí)別監(jiān)控發(fā)現(xiàn)問題后,也可以在輔助利用虛擬機(jī)內(nèi)置監(jiān)控工具進(jìn)行進(jìn)一步的定位。三、透視寶Java監(jiān)控實(shí)現(xiàn)原理SourceprcgnmtermcdL(tcIn^utVirtualmackins?OutpnlSourceprcgnmtermcdL(tcIn^utVirtualmackins?Outpnl圖:Java的執(zhí)行模型在Java的執(zhí)行體系中,由.Java源碼文件編譯后的.class字節(jié)碼文件,可以理解為中間語言。

圖:透視寶Java監(jiān)控實(shí)現(xiàn)原理圖:透視寶Java監(jiān)控實(shí)例運(yùn)行圖1字節(jié)碼load至JVM時(shí)發(fā)生了什么*回調(diào)函數(shù)注冊(cè)完畢后,凡是當(dāng)有任何的class文件即將被類加載器加載前,都會(huì)執(zhí)行回調(diào)函數(shù)transform,在此方法內(nèi)實(shí)現(xiàn)的類改變操作。*實(shí)現(xiàn)的transform方法中,我們使用的是ASM字節(jié)碼操作框架,ASM從二進(jìn)制形式的類文件中讀取、分析類的信息,然后修改改變類的行為。*transform方法的基本代碼形式如下:

i~F(found■sizeQ>fl||tracerMatch){ClassReadercr=newClas&Reader(cbf);Clas&Writercw二newClassWriter(crycbf[7]>(byte)0x32?ClassWriter.COMPtffE^FMMES;&)j,Clas&Vlsitorscv=createVlsltopfclJSsLoader^ found,trace^lEnalne^cw);cruacc@pt(&cVj.0);buf=cw.toByteArray();returnbjf;2、如何實(shí)際改變類行為*在依賴于ASM基礎(chǔ)之上,我們抽象出這樣的業(yè)務(wù)模型攔截定義配置引擎(InterceptEngine)攔截定文上下文攔截定義描述(InterceptDefinjtionJ攔截探筆攔截定義過濾器運(yùn)行時(shí)攔截處理器Pi攔截探筆攔截定義過濾器運(yùn)行時(shí)攔截處理器Pi*常用的攔截探針*常用的運(yùn)行時(shí)攔截處理器字符串格式化處理器字符串匹配處理器本地線程處理器開啟方法棧追蹤處理器方法棧追蹤自定義屬性處理器用戶自定義業(yè)務(wù)處理器匚比如繪制應(yīng)用拓?fù)涮幚砥?支持的攔截定義過濾器規(guī)則類注解方式類注解注解正則+方法名正則方式過濾器規(guī)則類名方式字符串格式化處理器字符串匹配處理器本地線程處理器開啟方法棧追蹤處理器方法棧追蹤自定義屬性處理器用戶自定義業(yè)務(wù)處理器匚比如繪制應(yīng)用拓?fù)涮幚砥?支持的攔截定義過濾器規(guī)則類注解方式類注解注解正則+方法名正則方式過濾器規(guī)則類名方式接口名方式類名正則+方法注解方式 —類注解+方法注解方式接口名正則+方法名正則方式—訪問修飾符+類名正則+方法名正則十返回值十方法參數(shù)方式—類名正則+方法名正則方式*該業(yè)務(wù)模型對(duì)應(yīng)的行為定義攔截描述時(shí),指定過濾攔截哪些類、哪些方法,然后,在這些行為的點(diǎn)上,可以埋入探針、處理器。重寫visitCode、visitInsn、visitMaxs分別實(shí)現(xiàn)方法進(jìn)入、返回、異常的相關(guān)操作改寫。四、透視寶Java監(jiān)控部署流程1登錄云智慧透視寶官網(wǎng):點(diǎn)擊頁(yè)面右上角導(dǎo)航的"免費(fèi)試用",正確填寫免費(fèi)試用的申請(qǐng)信息后會(huì)彈出下面的對(duì)話框,同時(shí)激活郵件會(huì)自動(dòng)發(fā)送到你的郵箱中,按照流程注冊(cè)帳

號(hào)即可。恭喜您.注冊(cè)成功!在[鉀之巴會(huì)有激活邱曲發(fā)送到怒^郵甫.請(qǐng)怒:主言童收齊按笛輯中慝敲t理。2、注冊(cè)成功后,登錄透視寶,點(diǎn)擊配置-應(yīng)用,在配置頁(yè)面中下載安裝SmartAgent。安裝成功后,SmartAgent會(huì)根據(jù)系統(tǒng)配置自動(dòng)獲取主機(jī)信息,大致兩分鐘后,您就可以在“主機(jī)-服務(wù)器"模塊中查看該服務(wù)器的CPU、內(nèi)存、網(wǎng)卡、磁盤及進(jìn)程等性能數(shù)據(jù)。Uimi豐斗3如果要監(jiān)控應(yīng)用運(yùn)行時(shí)代碼、主機(jī)中服務(wù)和數(shù)據(jù)庫(kù)性能數(shù)據(jù),您需要進(jìn)一步安裝和配置SmartAgent提供的各種插件,這是因?yàn)镾martAgent實(shí)現(xiàn)了一種開放式的插件式結(jié)構(gòu),對(duì)每個(gè)運(yùn)行時(shí)代碼、服務(wù)和數(shù)據(jù)庫(kù)的監(jiān)控都是通過相應(yīng)的插件來實(shí)現(xiàn)的。

c3i>iBi?至S4UKinW31I3.2J.210.4.1-107(0---?nilmPF14.4-221?3CL4.2J17lD.0.3.67(dodctrceriDDS).toajjs?14.QUL44LOU-bHio.4,1.19'73O.4.UW3itiiiEiEZ^T nsaflewivi.de90*013tLM、6QNm-u&jIjuIIHiic3i>iBi?至S4UKinW31I3.2J.210.4.1-107(0---?nilmPF14.4-221?3CL4.2J17lD.0.3.67(dodctrceriDDS).toajjs?14.QUL44LOU-bHio.4,1.19'73O.4.UW3itiiiEiEZ^T nsaflewivi.de90*013tLM、6QNm-u&jIjuIIHiiA^ipkdilcn.正匪罰DilCOTETTljQlS§的dIW奇!wQ.50F=HF鼻財(cái)4-1.1.N^niMR呦心pp“l(fā)L.】SmartAgent在安裝完成后,加載過程中自動(dòng)發(fā)現(xiàn)你的應(yīng)用組件,如果沒有自動(dòng)監(jiān)測(cè)到Java環(huán)境,也可以手動(dòng)添加JavaAgent。如上圖所示,點(diǎn)擊“管理”入口,進(jìn)入"插件管理”,點(diǎn)擊頁(yè)面下部的"添加服務(wù)",選擇JavaAgent后,點(diǎn)擊"創(chuàng)建”。創(chuàng)建完畢后,點(diǎn)擊“ON”。(該ON操作只是初始化用戶的信息,以便以后采集到的信息能夠正確的回傳給該用戶。)|[HUMiMi.awM.09LC!muzi?AJJJL7

itikijsl#Al.f7JEXUj!J14dLLLl垃沖

?4ili2L10*.3-993■耳dh1MniifU1>3一W任曰3汙C*mw-L4?占一lutiiMndbDrY-rflsi^■止4■燉fiT;?LR12?5ThtuLU 葩krKb卜TQH氓即翊即口■止S>£fl7TWSr>!ij?,t -a=a-3trJW3?-?*?.以上都操作完后,在{smartagent的安裝路徑}/plugins,就會(huì)看到如下形式的ID|t/tlaAii/KKrLjKiNn'^.qipmi■Mt:fahl宮盤IL.E昨叫:柬菽血ssitm丈妙費(fèi)也i.nmpni1」SHMffriMr.!?JMI5AH'i.Eiiir^jci£*jxcwcr礙3dL5?a?f生jygni」?二mstsHioazm:ljna?WEnr..jmlsM:在到{smartagent的安裝路徑}/plugins/JavaAgent_1442476463X1002x0/conf文件夾下,查看app.conf文件,看看該文件內(nèi)的HostKey的值是否是如下類似的加密形式Lubicajinwr巧風(fēng)■work■'IE克匸丹?訂m:fi真[#応詢4:1:壬in?畫□打HU:TC:牡匚0;圧時(shí)11蠱M口遠(yuǎn)朮-tYFG8;九」&5丁」?廠匚戸丘;皿卞匹*禮/代色匸臥OxXrS■花張匚託玄■lAUEfth口HOME!!Rrp9BnE5T=xyp=^ttp:A/VLO-2.2.U:2473護(hù)r^BlxfiBr":p]DUjcCF』為屮:ppP?"=:!■n血砂:■■:ExtJ■incluSt■="t.a-xjkxxHjaJ".■aita_iEBffl.e?wrLfrBin"f"paxerri "spcaenze"i"ZO0G<"j?耐1"1葩■i"2Q?B, i'hi■■至u町■』rtias"i"is'〕■pzcinfi5e"i"is-'(■<,3wnns&l"i"LBi-prot?!"i“聞*?丸.?』?ILJuricWrei"25?S9B.?讓rexTi"lB.abatox"-i"rw叫

以上情況,表明JavaAgent已經(jīng)下載啟動(dòng)初始化成功。4、 安裝JavaAgent至各種應(yīng)用服務(wù)器上,如tomcat\jboss\weblogic。(該操作參考官網(wǎng)/即可)5、 只要啟動(dòng)相應(yīng)服務(wù)器,然后訪問您的應(yīng)用url即可,該url對(duì)用的代碼執(zhí)行情況即可呈現(xiàn)給您,一旦出現(xiàn)緩慢問題也一目了然。如下圖示意■s■s722g.llrmUALlOZLLLS4:i7155/n722g.llrmUALlOZLLLS4:i7155/nBdH./76..iipjE-^15-£I7D2lb:04吐.:弟柿E.)Dr^sa[Mdni!/c*:dlinaj,carB.*s^tBridardEni^irwV^VB.RnH^kB{l'Lar^ltHp>£h*/^nLdir^>lCEiririactar/R?iqu!?v1^Larg/iap?cK?^lcak?Enii.fccnrH<kar/Ft?aparwv.-j,^e>7iM.liQ1o炮曲訊丄Z/fh1陽話聰b/m牡心訐曲由&就W斗agef■臉H咖5?創(chuàng)ch、翠曲曲QC0Q3>1口rg!>"■pivH?莊hirafw* tW■b£r?rurit¥Multi*弓《r”i?H韭|1庁ion材也dr10Z*pCfaoi1jE0rT^^ipKcmafcO'rH|,auppcr1,/Farw£nt4^Hp4DrpfiHMancl?<|LjMi'Mi^iilidri*krt,!hti3i-l'*Htftp£FBraiBtR4qu?ii't;L3A¥ax.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論