




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理一、Java平臺體系及應(yīng)用場景從1995年Sun Microsystems公司正式推出Java,到2006年時Sun公司將其開源,迄今為止已經(jīng)有了20年的歷史。Java本身已不僅僅只是一門面向?qū)ο蟮木幊陶Z言,而是由一系列計(jì)算機(jī)軟件和規(guī)范形成的技術(shù)體系,這個技術(shù)體系提供了完整的跨平臺開發(fā)與部署的支持,實(shí)現(xiàn)“一次編寫、到處運(yùn)行”的目的。Java已經(jīng)廣泛的應(yīng)用于嵌入式、移動終端、企業(yè)服務(wù)器、大型機(jī)等各種場合。Sun官方所定義的Java技術(shù)體系包括如下幾個組成部分:* Java程序設(shè)計(jì)語言* 各種硬件平臺上的Java虛擬機(jī)* Class文件格式* 來自商業(yè)機(jī)構(gòu)和開源社
2、區(qū)的第三方Java類庫 圖:Java技術(shù)體系組件圖Java Virtual Machine(JVM)是Java體系的基礎(chǔ),負(fù)責(zé)解釋、編譯執(zhí)行.class文件形式的字節(jié)碼,同時負(fù)責(zé)內(nèi)存管理、熱點(diǎn)代碼檢測和運(yùn)行時編譯優(yōu)化。正是由于有了虛擬機(jī)的基礎(chǔ),才使Java實(shí)現(xiàn)了“一次編寫、到處運(yùn)行”。Java這20年的發(fā)展,其實(shí)更是虛擬機(jī)的發(fā)展過程。期間經(jīng)歷了Sun、BEA公司各自開發(fā)的虛擬機(jī),2009年之后,ORACLE將這兩家公司收購,并將這些虛擬機(jī)取長補(bǔ)短、合二為一。目前還是開源的虛擬機(jī)OpenJDK,可供愛好者學(xué)習(xí)研究用。 JRE部分是支持Java程序運(yùn)行的標(biāo)準(zhǔn)環(huán)境。JDK是JRE的超集,包含JRE的
3、一切,再加上工具如編譯器、調(diào)試器等。二、Java性能監(jiān)控需求對于一個企業(yè)的應(yīng)用系統(tǒng),大多數(shù)情況下,肯定是由多種編程語言開發(fā)的各種系統(tǒng)的集成。我們都非常關(guān)心系統(tǒng)的可用性、及時響應(yīng)性、資源的消耗,比如CPU、內(nèi)存、各種I/O、網(wǎng)路帶寬等消耗情況。對于這些問題的性能瓶頸點(diǎn),我們一般可以歸納為外部服務(wù)(如第三方API)、資源讀寫、代碼異常。如果在發(fā)生這些問題時,能夠及時完整的抓拍記錄保留下來,那么對于我們解決問題將會提供充足的證據(jù),解決問題會變的非常容易。對于Java應(yīng)用系統(tǒng)來說,JVM自身提供了相應(yīng)的性能監(jiān)控手段和工具,經(jīng)常在出現(xiàn)問題后,比如內(nèi)存泄漏或溢出時,我們會通過jmap命令導(dǎo)出堆的轉(zhuǎn)儲快照,
4、利用相應(yīng)的命令jhat或其他相應(yīng)的第三方內(nèi)存分析工具來分析對象的占用情況。響應(yīng)緩慢時,我們可能會用jstat監(jiān)視命令、或jdk的可視化工具jconsole、visualvm來分析JVM的垃圾回收類型、回收頻率,來推測是否是垃圾回收導(dǎo)致的。有可能我們還要接著分析線程轉(zhuǎn)儲快照,通過jstack取出線程的棧快照,來分析是否有真死鎖、死循環(huán)導(dǎo)致的相應(yīng)緩慢、資源負(fù)載高等情況。當(dāng)有問題出現(xiàn)時,許多開發(fā)人員可能都是比較盲目的用這些工具來試探性定位問題,而大多數(shù)情況下,這種試探會無功而返。因?yàn)檫@些分析工具主要是側(cè)重Java單方面的分析,比如該系統(tǒng)調(diào)用第三方API,如果第三方API有問題,是無法監(jiān)控到的。還有像
5、文件、DB資源的訪問也是是無法監(jiān)控到的。而且,只有對Java虛擬機(jī)機(jī)制較為熟悉的高級開發(fā)人員才能比較好的運(yùn)用、理解這些工具,對于大多數(shù)普通Java開發(fā)人員來說,這些問題只會令他們束手無策。像外部服務(wù)(如第三方API)、資源讀寫、代碼異常這些瓶頸點(diǎn),需要通過代碼級別的監(jiān)控才能直接、快速、有效的找到癥結(jié)所在。調(diào)用第三方API的耗時、資源訪問的耗時、代碼拋出的非預(yù)知異常,這些常見問題代碼監(jiān)控完全能夠監(jiān)控到,并能夠?qū)崟r抓拍記錄,一旦有問題可以快速還原事故問題現(xiàn)場。通過代碼級別監(jiān)控發(fā)現(xiàn)問題后,也可以在輔助利用虛擬機(jī)內(nèi)置監(jiān)控工具進(jìn)行進(jìn)一步的定位。三、透視寶Java監(jiān)控實(shí)現(xiàn)原理圖:Java的執(zhí)行模型在Jav
6、a的執(zhí)行體系中,由.Java源碼文件編譯后的.class字節(jié)碼文件,可以理解為中間語言。圖:透視寶Java監(jiān)控實(shí)現(xiàn)原理圖:透視寶Java監(jiān)控實(shí)例運(yùn)行圖1、字節(jié)碼load至JVM時發(fā)生了什么 * 回調(diào)函數(shù)注冊完畢后,凡是當(dāng)有任何的class文件即將被類加載器加載前,都 會執(zhí)行回調(diào)函數(shù)transform,在此方法內(nèi)實(shí)現(xiàn)的類改變操作。* 實(shí)現(xiàn)的transform方法中,我們使用的是ASM字節(jié)碼操作框架,ASM從二進(jìn)制 形式的類文件中讀取、分析類的信息,然后修改改變類的行為。* transform方法的基本代碼形式如下:2、如何實(shí)際改變類行為* 在依賴于ASM基礎(chǔ)之上,我們抽象出這樣的業(yè)務(wù)模型* 常用
7、的攔截探針* 常用的運(yùn)行時攔截處理器* 支持的攔截定義過濾器規(guī)則* 該業(yè)務(wù)模型對應(yīng)的行為定義攔截描述時,指定過濾攔截哪些類、哪些方法,然后,在這些行為的點(diǎn)上,可以埋入探針、處理器。重寫visitCode、visitInsn、visitMaxs分別實(shí)現(xiàn)方法進(jìn)入、返回、異常的相關(guān)操作改寫。四、透視寶Java監(jiān)控部署流程1、登錄云智慧透視寶官網(wǎng):點(diǎn)擊頁面右上角導(dǎo)航的“免費(fèi)試用”,正確填寫免費(fèi)試用的申請信息后會彈出下面的對話框,同時激活郵件會自動發(fā)送到你的郵箱中,按照流程注冊帳號即可。2、注冊成功后,登錄透視寶,點(diǎn)擊配置-應(yīng)用,在配置頁面中下載安裝Smart Agent。安裝成功后,Smart Age
8、nt會根據(jù)系統(tǒng)配置自動獲取主機(jī)信息,大致兩分鐘后,您就可以在“主機(jī)服務(wù)器”模塊中查看該服務(wù)器的CPU、內(nèi)存、網(wǎng)卡、磁盤及進(jìn)程等性能數(shù)據(jù)。3、如果要監(jiān)控應(yīng)用運(yùn)行時代碼、主機(jī)中服務(wù)和數(shù)據(jù)庫性能數(shù)據(jù),您需要進(jìn)一步安裝和配置Smart Agent提供的各種插件,這是因?yàn)镾mart Agent實(shí)現(xiàn)了一種開放式的插件式結(jié)構(gòu),對每個運(yùn)行時代碼、服務(wù)和數(shù)據(jù)庫的監(jiān)控都是通過相應(yīng)的插件來實(shí)現(xiàn)的。Smart Agent在安裝完成后,加載過程中自動發(fā)現(xiàn)你的應(yīng)用組件,如果沒有自動監(jiān)測到Java環(huán)境,也可以手動添加Java Agent。如上圖所示,點(diǎn)擊“管理”入口,進(jìn)入“插件管理”,點(diǎn)擊頁面下部的“添加服務(wù)”,選擇Jav
9、aAgent后,點(diǎn)擊“創(chuàng)建”。創(chuàng)建完畢后,點(diǎn)擊“ON”。(該ON操作只是初始化用戶的信息,以便以后采集到的信息能夠正確的回傳給該用戶。)以上都操作完后,在smartagent的安裝路徑/plugins,就會看到如下形式的 在到smartagent的安裝路徑/plugins/JavaAgent_X1002x0/conf文件夾下,查看app.conf文件,看看該文件內(nèi)的HostKey的值是否是如下類似的加密形式以上情況,表明JavaAgent已經(jīng)下載啟動初始化成功。4、安裝JavaAgent至各種應(yīng)用服務(wù)器上,如tomcatjbossweblogic。(該操作參考官網(wǎng)https:/www.tous
10、/即可)5、只要啟動相應(yīng)服務(wù)器,然后訪問您的應(yīng)用url即可,該url對用的代碼執(zhí)行情況即可呈現(xiàn)給您,一旦出現(xiàn)緩慢問題也一目了然。如下圖示意五、透視寶Java代碼性能監(jiān)控特點(diǎn)在功能方面,透視寶無論是在Java,還是其他如.NET、PHP等主流語言的監(jiān)控上,都包括:查看執(zhí)行最慢的10個元素,包括元素執(zhí)行次數(shù)、持續(xù)時長和占用時長百分比;查看HTTP請求參數(shù),包括請求的響應(yīng)狀態(tài)、鏈接頁面、具體的請求參數(shù)及返回結(jié)果;查看代碼執(zhí)行堆棧的詳細(xì)樹狀信息,包括每個方法的計(jì)算時間、總耗時和被調(diào)用的次數(shù),您能直接看到特殊標(biāo)識的最慢方法;查看涉及SQL語句的總耗時排序,包括SQL執(zhí)行總耗時、執(zhí)行次數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度金融行業(yè)競業(yè)禁止協(xié)議補(bǔ)償金計(jì)算細(xì)則
- 二零二五年度精裝修房屋租賃協(xié)議書
- 二零二五年度主合同與從合同在新能源汽車產(chǎn)業(yè)鏈中的協(xié)同發(fā)展及風(fēng)險共擔(dān)協(xié)議
- 二零二五年度文化產(chǎn)業(yè)股權(quán)投資合同協(xié)議
- 2025年度苗木種植與生態(tài)農(nóng)業(yè)開發(fā)協(xié)議
- 初中家長會學(xué)生代表發(fā)言稿
- 2025年林芝貨運(yùn)從業(yè)資格證在哪里練題
- 2025年鶴崗道路貨運(yùn)駕駛員從業(yè)資格考試題庫
- 掛職鍛煉發(fā)言稿
- 網(wǎng)站設(shè)計(jì)與開發(fā)合同
- 社區(qū)獲得性肺炎臨床路徑
- 產(chǎn)品品質(zhì)檢驗(yàn)流程標(biāo)準(zhǔn)規(guī)范模板()
- DB12-595-2015醫(yī)院安全防范系統(tǒng)技術(shù)規(guī)范
- 五年級下冊英語課件-Unit 2 My favourite season B Let's learn 人教PEP版(共15張PPT)
- GB∕T 7260.40-2020 不間斷電源系統(tǒng) UPS 第4部分:環(huán)境 要求及報告
- 高邊坡施工危險源辨識及分析
- 水廠項(xiàng)目基于BIM技術(shù)全生命周期解決方案-城市智慧水務(wù)講座課件
- 幼兒園繪本:《閃閃的紅星》 紅色故事
- 三年級學(xué)而思奧數(shù)講義.doc
- 劉姥姥進(jìn)大觀園課本劇劇本3篇
- 產(chǎn)品承認(rèn)書客(精)
評論
0/150
提交評論