本篇文章為大家展示了Quest JProbe最佳實(shí)踐的示例分析,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
石峰網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
1. 介紹
在Java的廣泛應(yīng)用中,一個(gè)關(guān)鍵驅(qū)動(dòng)因素是由于使用標(biāo)準(zhǔn)類庫(kù)和應(yīng)用框架從而提高了生產(chǎn)效率。通過減少必要的設(shè)計(jì),實(shí)現(xiàn)和調(diào)試等軟件開發(fā)任務(wù),Java在各種平臺(tái)之間極大地改善了集成性和互操作性;其它的開發(fā)環(huán)境都不能提供像Java那樣的強(qiáng)大功能。實(shí)際上,沒有一個(gè)環(huán)境像J2EE那樣具有明顯的基于框架開發(fā)的優(yōu)點(diǎn),J2EE能夠快速地構(gòu)建可擴(kuò)展,分布式的安全企業(yè)級(jí)應(yīng)用。
雖然這些優(yōu)點(diǎn)一直在促進(jìn)J2EE的空前發(fā)展,但也經(jīng)常出現(xiàn)一些麻煩,那就是人們經(jīng)常對(duì)J2EE應(yīng)用的性能感到失望。因此,我們需要一些工具和調(diào)查策略來幫助J2EE開發(fā)團(tuán)隊(duì)解決這些性能問題。這就是Quest JProbe Profiler和Jprobe Memory Debugger所要解決的問題。
1.1 J2EE性能概攬
一般情況下,最終用戶對(duì)J2EE應(yīng)用性能的體驗(yàn)與下面層次是緊密相關(guān)的:
J2EE體系結(jié)構(gòu)圖
J2EE應(yīng)用是指servlets,JSPs,EJBs和支持類,它們?cè)贘2EE應(yīng)用服務(wù)器的上下文環(huán)境中構(gòu)成了客戶的應(yīng)用。
J2EE應(yīng)用服務(wù)器是指J2EE應(yīng)用服務(wù)器基礎(chǔ)結(jié)構(gòu)的設(shè)計(jì),實(shí)現(xiàn)和配置,它們提供了客戶J2EE應(yīng)用的上下文環(huán)境。
JAVA運(yùn)行環(huán)境是指JAVA虛擬機(jī)及其配置(堆的大小等等)的設(shè)計(jì)和實(shí)現(xiàn)。
平臺(tái)-底層硬件(如CPU的數(shù)目,內(nèi)存的大小,I/O子系統(tǒng)等)和操作系統(tǒng)設(shè)計(jì),實(shí)現(xiàn)和配置(線程和進(jìn)程調(diào)度,子系統(tǒng)優(yōu)化,整體負(fù)載等) 。
雖然毫無疑問,底部層次會(huì)影響整個(gè)性能,經(jīng)驗(yàn)也不斷地表明,性能下降的普遍原因是由組成J2EE應(yīng)用的Servlets,JSPs和EJBs的設(shè)計(jì)問題和不佳的實(shí)現(xiàn)造成的。本文將集中討論在這個(gè)底層中如何識(shí)別出性能下降的原因。
1.2 概述
本文描述了在BEA WebLogic Server6.1上下文環(huán)境中,怎樣用Quest JProbe Memory Debugger和Profiler分析J2EE應(yīng)用。包括三個(gè)主要部分:
設(shè)置-在介紹JProbe的體系結(jié)構(gòu)之后,我們將描述怎樣把JProbe Memory Debugger和Profiler集成到WebLogic Server6.1環(huán)境中。
對(duì)象循環(huán)分析-在J2EE應(yīng)用中,性能下降的普遍原因是創(chuàng)建過多的短期對(duì)象(也可稱為對(duì)象循環(huán))。在這部分里,我們將展示怎樣使用JProbe Memory Debugger's Garbage Monitor識(shí)別大量創(chuàng)建短期對(duì)象的方法。這些是進(jìn)一步分析減少創(chuàng)建過多對(duì)象的最佳方法。
J2EE性能分析-最后,我們將使用JProbe Profiler向你介紹怎樣進(jìn)行J2EE應(yīng)用的性能分析,并且在語句級(jí)上快速地識(shí)別出一些耗時(shí)最多的方法。
2. 集成BEA weblogic 服務(wù)器和Quest JProbe
2.1 Quest JProbe
Quest JProbe產(chǎn)品線由一族工具組成,該族工具包括下面四個(gè)分析工具。
JProbe Memory Debugger-檢查Java軟件的內(nèi)存使用情況。
JProbe Profiler-剖析Java軟件的性能。
JProbe Threadalyzer-識(shí)別線程級(jí)的死鎖和錯(cuò)誤的訪問沖突
JProbe Coverage-通過提供的語句級(jí)執(zhí)行信息驗(yàn)證測(cè)試框架的完整性。
雖然本文集中討論了JProbe Memory Debugger和Profiler,但所有四個(gè)工具都采用了相同的體系結(jié)構(gòu)設(shè)計(jì),并且與BEA WebLogic服務(wù)器的集成方法是相同的。
2.1.1 JProbe的體系結(jié)構(gòu)
一個(gè)基于JProbe的調(diào)查會(huì)話由兩個(gè)程序組成:
圖2 JProbe體系結(jié)構(gòu)
JProbe控制臺(tái)是一個(gè)基于Swing的Java應(yīng)用,它提供了用戶圖形界面(GUI),用于建立調(diào)查會(huì)話,在程序運(yùn)行時(shí)查看分析信息和深入分析Snapshot文件中的信息內(nèi)容。
測(cè)試型Java虛擬機(jī)-JProbe通過JVMPI(Java Virtual Machine Profiling Interface)提供的回調(diào)方法,使用標(biāo)準(zhǔn)的Java虛擬機(jī)運(yùn)行Java應(yīng)用并收集分析信息,該虛擬機(jī)是由廠商提供的。在剖析基于WLS的J2EE應(yīng)用中,Java應(yīng)用運(yùn)行在Java虛擬機(jī)中,該虛擬機(jī)由WebLogic服務(wù)器的基本框架組成,就象J2EE應(yīng)用部署到上面一樣。
這種結(jié)構(gòu)具有非常靈活的啟動(dòng)方式。你可以從用戶圖形界面本身啟動(dòng)測(cè)試型Java虛擬機(jī),也可以單獨(dú)啟動(dòng)測(cè)試型Java虛擬機(jī)并且使它連接上JProbe控制臺(tái)。
2.2 使用JProbe Application Server Integration Tool
1. 啟動(dòng)JProbe Application Server Integration。
2. 從左上角下拉列表中選擇你要集成的BEA Weblogic服務(wù)器版本。
圖3 JProbe Application Server Integration窗口
3. 點(diǎn)擊"Create"按鈕。編輯窗口右邊的內(nèi)容,如圖3所示。
4. 編輯下面區(qū)域或使用默認(rèn)值。
Integration ID: | JProbe Demo 1 | Integration ID,便于重用每次集成過程 |
Server Directory: | D:\bea\wlserver6.1 | 直接輸入WLS服務(wù)器根路徑或者通過"瀏覽"方式輸入。 |
Domain Name: | Mydomain | 輸入你想分析的域名。 |
Startup Script: | StartWeblogic.cmd | 直接輸入要調(diào)查的服務(wù)器的啟動(dòng)腳本或者通過"瀏覽"方式輸入。 |
JProbe Settings:(JPL File) | check the VAR checkbox | 集成工具允許你使用先前創(chuàng)建的JPL(JProbe Launchpad)文件。如果要使用由每個(gè)工具在啟動(dòng)時(shí)默認(rèn)創(chuàng)建的JPL文件,選擇VAR復(fù)選框。 |
Java Executable: | d:\sun\jdk1.3.1\bin\Java.exe | 可直接輸入或通過瀏覽方式輸入Java虛擬機(jī)的執(zhí)行文件路徑。 |
5. 點(diǎn)擊"Advanced>>"按鈕。
6. 填寫下面這區(qū)域。
Java Options: -classic -mx128m -ms64m 有選擇地給Java虛擬機(jī)輸入?yún)?shù)。
7. 點(diǎn)擊"Save"按鈕。
圖4. JProbe Application Server Intergation窗口
你已經(jīng)成功創(chuàng)建和BEA Weblogic6.1的集成, 所有四個(gè)工具都可以使用這個(gè)集成過程。
8. 點(diǎn)擊"Close"按鈕。
3. 識(shí)別J2EE應(yīng)用性能下降
JProbe Memory Debugger能幫助你追蹤到游離對(duì)象(loitering objects)和減少創(chuàng)建過多的對(duì)象,并且JProbe Profiler能幫助你發(fā)現(xiàn)性能瓶頸。根據(jù)具體情況,需要具體分析。在這里,我們簡(jiǎn)單地概括用于解決對(duì)象循環(huán)和性能瓶頸這兩個(gè)常見問題的步驟。更多的信息和其它使用JProbe Memory Debugger和Jprobe Profiler的方法,可以參考在線幫助或者閱讀JProbe Memory Debugger Guide和JProbe Profiler Developer's Guide。
3.1 對(duì)象循環(huán)(Object Cycling)
Java應(yīng)用性能下降的一個(gè)主要原因是創(chuàng)建過多的對(duì)象 (或稱為對(duì)象循環(huán))。Java虛擬機(jī)分配了過多的內(nèi)存,創(chuàng)建了不必要的對(duì)象并對(duì)這些對(duì)象的初始化,加大了垃圾回收活動(dòng),從而引起性能下降。
作為一個(gè)性能分析人員,你首先需要識(shí)別出創(chuàng)建大量短期對(duì)象的方法。這些方法是進(jìn)一步做減少創(chuàng)建對(duì)象數(shù)量分析的理想入手點(diǎn)。JProbe Memory Debugger提供的一個(gè)垃圾監(jiān)視功能可以把對(duì)象和分配它們的方法連接起來,并且當(dāng)你的應(yīng)用運(yùn)行時(shí),可以追蹤有多少對(duì)象已經(jīng)被垃圾回收了。
3.1.1 啟動(dòng)JProbe Memory Debugger的研究會(huì)話
1. 啟動(dòng)JProbe Memory Debugger。當(dāng)歡迎界面出現(xiàn)的時(shí)候,點(diǎn)擊"Run"開始啟動(dòng)。
圖5.JProbe歡迎界面
2. 在JProbe LaunchPad窗口中:
a. 選擇"Using Application Server"
b. 從"Application Server"下拉的菜單中選擇BEA Weblogic6.1
c. 注意在"Integration ID"下拉的菜單中填寫JProbe Demo 1
3. 選擇"Filter"
a. 點(diǎn)擊"Please enter a package,or method to display data for"。輸入你要調(diào)查的包:profiler.com.quoteme.stockwatch
b. 在"Display"欄的下拉菜單里選擇"Display"
4. 選中"Monitor Garbage Collections from Program Start"復(fù)選框。
5. 選擇"Snapshot Directory:"為d:\temp。
6. 點(diǎn)擊"Run"按鈕。
圖6.JProbe LaunchPad Pad窗口
當(dāng)WebLogic Server初始化時(shí),Runtime Heap Graph將增高,這反映了對(duì)象創(chuàng)建和垃圾回收活動(dòng)。一旦WebLogic Server已經(jīng)被充分初始化后,你就可以開始著手分析了。
3.1.2 運(yùn)行時(shí)交互
一旦WebLogic Server已經(jīng)充分初始化,選擇你想要用于分析對(duì)象循環(huán)的應(yīng)用用例。選擇Grabage Monitor標(biāo)簽,按下面的步驟:
1. 首先運(yùn)行一次Garbage Collection ,回收在Java堆中分配的,但不再使用的對(duì)象。Garbage Monitor表隨時(shí)更新反映這些被回收對(duì)象的情況。
2. 點(diǎn)擊"Clear Table"清空Garbage Monitor表。
3. 運(yùn)行你的應(yīng)用用例。當(dāng)Java虛擬機(jī)開始垃圾回收時(shí),Grabage Monitor表將隨之更新。
提示:在Heap Usage Chart中尋找負(fù)載峰值。急劇升降的負(fù)載峰值意味著一些對(duì)象在被垃圾回收之前只存活了很短的時(shí)間。連在一起的一些急劇升降的負(fù)載峰值是一個(gè)明確的信號(hào),意味著是一個(gè)對(duì)象循環(huán)問題。
4. 在完成你應(yīng)用用例后,再次運(yùn)行Garbage Collection ,回收最后分配但不再使用的對(duì)象。
3.1.3 分析結(jié)果
當(dāng)會(huì)話結(jié)束時(shí),Garbage Monitor中包含了已回收最多實(shí)例的前十個(gè)類。通常,這些類不是你自己應(yīng)用的類,準(zhǔn)確地說,它們是被你的一些方法(直接地或間接地)分配的第三方的類。最后一列是分配這些已回收對(duì)象的方法名。
提示:如果被不同方法分配的實(shí)例屬于同一個(gè)類,并且都是前十個(gè)類的話,你將見到兩行相同的類。
使用Filter Allocating Methods,只顯示你包中的一些方法,屏蔽掉其它包中的方法。在我們的例子中,客戶J2EE應(yīng)用定義在 profiler.com.quoteme.stockwatch包里面,所以我們把過濾規(guī)范profiler.com.quoteme.stockwatch.*.*輸入到Filter Allocating Methods文本輸入控制中。
在GC'ed列中,你能看到你的方法分配了多少實(shí)例。作為比較,查看Alive列就能看到還有多少實(shí)例仍在堆中。Java開發(fā)者通常會(huì)對(duì)創(chuàng)建和移走了多少對(duì)象而感到驚奇。
現(xiàn)在你已經(jīng)識(shí)別到你有問題的方法。想想你可能怎樣修改這些分配對(duì)象的方法,從而減少或排除對(duì)象循環(huán)?例如,你可以嘗試重用某個(gè)對(duì)象或者創(chuàng)建一個(gè)可重用的對(duì)象池。
WebLogic Server6.1編譯JSP后,自動(dòng)產(chǎn)生了一個(gè)servlet類名,并賦予一個(gè)包名和類名。例如,如果有一個(gè)名為TestJSP.jsp的JSP文件,將被編譯成名為jsp_servlet.__testjsp的類(JSP名跟著兩個(gè)下劃線,并且都是小寫字母)。
用Filtering Classes為jsp_servlet.*限制Garbage Monitor中的內(nèi)容,可以看到已經(jīng)被垃圾回收到Garbage Monitor中的JSP。在Filtering Allocating Methods設(shè)置jsp_servlet.*.*或jsp_servlet._<你的JSP名>.* 限制Garbage Monitor中的內(nèi)容,可以從分配的角度在指定的JSP中查看垃圾回收對(duì)象。
更深入的研究
如果你分配的方法沒有一個(gè)出現(xiàn)在Garbage Monitor中,或者在修改明顯的問題后,仍然有對(duì)象循環(huán)的問題;你需要進(jìn)行堆棧跟蹤,檢查哪個(gè)方法的調(diào)用導(dǎo)致了創(chuàng)建實(shí)例并分配了空間。需要使用 heap snapshot查看堆棧跟蹤。要了解更多的信息,請(qǐng)看在線幫助里的Garbage Collection Tutorial或者JProbe Memory Debugger Developer's Guide。
3.2 性能分析
解決對(duì)象循環(huán)問題有助于性能的改進(jìn),但你可能仍然面臨著性能瓶頸。進(jìn)行一次性能分析可幫助你在J2EE應(yīng)用中識(shí)別低效率的算法。JProbe Profiler提供了應(yīng)用的方法級(jí)和源代碼行級(jí)度量值。
3.2.1 啟動(dòng)JProbe Profiler調(diào)查會(huì)話。
1. 啟動(dòng)JProbe Profiler。當(dāng)歡迎界面出現(xiàn)時(shí),點(diǎn)擊"Run"開始。
圖8 JProbe歡迎窗口
2. 在JProbe LaunchPad窗口中:
a. 選擇"Using Application Server"
b. 從Application Server下拉菜單中選擇BEA Weblogic6.1
c. 注意在Integration ID下拉菜單中填JProbe Demo 1
3. 選擇Filter
a. 點(diǎn)擊Please enter a package,class,or method to display data for。輸入你要調(diào)查的包profiler.com.quoteme.stockwatch
b. 從Detail Level列的下拉菜單中選擇Line Lever
這個(gè)元素定義了我們想要把所有運(yùn)行在環(huán)境中的Java軟件看作基礎(chǔ)結(jié)構(gòu)。因?yàn)槲覀儾幌朐敿?xì)了解它們的性能信息 (我們只是想知道在代碼上的影響,我們不想更細(xì)地分析)
提示:在WLS6.1中的JSP Profiling當(dāng)JSP被WebLogic Server6.1編譯時(shí),產(chǎn)生的servlet被給予一個(gè)產(chǎn)生的包和類名。例如,如果有一個(gè)名為TestJSP.jsp的JSP文件,它被編譯后,生成名為jsp_servlet._testjsp的類(兩個(gè)底線被JSP名跟著,都是小寫字母)。 如果你想跟蹤你的JSP里的方法在執(zhí)行中花了多少時(shí)間,你必須指定正確的過濾策略,用于捕獲數(shù)據(jù)。
4. 選擇"CPU Time"
5. 選擇"Record Performance at Program Start"復(fù)選框
6. 選擇"a Snapshot Directory:"為d:\temp
7. 點(diǎn)擊"Run"按鈕
圖9 JProbe Profiler LaunchPad窗口
3.2.2 運(yùn)行時(shí)交互
在性能分析中,Heap Usage Chart就象一個(gè)執(zhí)行進(jìn)度的監(jiān)視器,與上節(jié)介紹的Garbage Monitor不同,這里不提供類似的運(yùn)行時(shí)性能信息。使WebLogic Server自己初始化到完全啟動(dòng)。
作為對(duì)象循環(huán)分析,我們推薦使用應(yīng)用級(jí)的,以用例為中心的方法進(jìn)行性能分析,具體如下:
1. 清空累積的性能數(shù)據(jù) 。
2. 運(yùn)行你的應(yīng)用用例。
3. 執(zhí)行一次性能快照 ,保存性能信息。
性能快照包括時(shí)間和在用例運(yùn)行期間對(duì)象創(chuàng)建等度量數(shù)據(jù)(這個(gè)運(yùn)行期間從重新設(shè)置性能信息開始-第一步,一直到執(zhí)行快照結(jié)束,第三步)。
3.2.3 解釋結(jié)果
JProbe Profiler提供兩個(gè)工具,以不同的格式顯示收集到的數(shù)據(jù);可根據(jù)具體情況選擇:
Method List是指以表的形式顯示與方法有關(guān)的數(shù)據(jù)信息。使用Method List可以按照名稱或度量值排序,或顯示只顯示其中部分方法。
Call Graph--是指以有向圖的形式顯示方法。可以使用Call Graph查看并跟蹤程序中方法間的調(diào)用關(guān)系。從Method List或Call Graph中,你能使用下面這些工具深入到更多的細(xì)節(jié)數(shù)據(jù)。
Method Detail View是指對(duì)于所選的方法,顯示它們是被哪些方法(也稱父方法)調(diào)用了或它們調(diào)用了哪些方法(也稱子方法)。
Source Window顯示所選方法的語句級(jí)性能信息。
3.2.3.1 Time and Object Creation Metrics
JProbe Profiler在方法方面收集了三個(gè)基本度量值:
Number of Calls是指在會(huì)話期間該方法被調(diào)用的次數(shù)
Method Time是指執(zhí)行該方法所花費(fèi)的總時(shí)間
Method Objects是指該方法創(chuàng)建的對(duì)象總數(shù)
在這些基本的度量值基礎(chǔ)上,JProbe Profiler計(jì)算出兩種度量值表示方法調(diào)用樹:
Cumulative Time是指執(zhí)行這些方法的時(shí)間,和執(zhí)行它們直接或間接調(diào)用的方法所花費(fèi)時(shí)間的總和。
Cumulative Objects是指這些方法創(chuàng)建的對(duì)象,和這些方法直接或間接調(diào)用其它方法創(chuàng)建的對(duì)象的總合
基于Number of Calls用四種平均度量值:
Avg.Method Time是指調(diào)用方法的時(shí)間除以調(diào)用次數(shù)
Avg.Method Objects是指方法對(duì)象除以調(diào)用次數(shù)(方法對(duì)象指方法執(zhí)行期間創(chuàng)建的對(duì)象數(shù),不包括派生對(duì)象創(chuàng)建的數(shù))
Avg.Cumulative Time是指累積時(shí)間除以調(diào)用次數(shù)
Avg.Cumulative Objects是指累積對(duì)象除以調(diào)用次數(shù)
在默認(rèn)情況下,Call Graph顯示的數(shù)據(jù)是在性能快照中的數(shù)據(jù)。我們建議你關(guān)閉Call Graph一會(huì)再打開Method List窗口。
3.2.3.2 Method List
Method List窗口(見圖10)以表的形式顯示性能數(shù)據(jù)。
圖10 JProbe Profiler Method List窗口
每一行顯示了方法的時(shí)間和方法創(chuàng)建對(duì)象的度量值。使用Method List能很快識(shí)別你最耗時(shí)的方法。通常你會(huì)發(fā)現(xiàn)你的性能瓶頸和這些方法有關(guān)。
如果你是第一次調(diào)查,跟著下面這些步驟將使你能更有效地使用Method List。
1. 選中你的snapshot,打開"Method List"。
2. "Filter"區(qū)域只用于顯示在你包中或在你感興趣的類中的方法。
3. 點(diǎn)擊"Method Time"列名,把你最消耗時(shí)間的方法排在最前面。仔細(xì)查看前十個(gè)。是不是有一些度量值令你驚訝?你能改進(jìn)你方法中的算法嗎?
4. 點(diǎn)擊"Cumulative Time"列名,把最消耗時(shí)間的調(diào)用樹排在最前面。比較一下"Method Time"和"Cumulative Time"。雖然方法本身可能效率很高,但也可能調(diào)用了低效率的方法,這些低效率的方法可能在你的代碼中,或者在第三方的包或應(yīng)用框架中。
5. 點(diǎn)擊”Number of Calls”列名,查看一下你哪個(gè)方法被調(diào)用最多。如果一個(gè)或多個(gè)度量值同時(shí)反映這些方法是低效率的,需要考慮減少調(diào)用這些方法,或調(diào)用那些效率稍好的方法。
3.2.3.3. Call Graph
Call Graph(見圖11)提供一個(gè)非常有力的方法調(diào)用關(guān)系視圖。它把J2EE應(yīng)用放到WebLogic Server上下文環(huán)境中,所以你能看到WebLogic啟動(dòng)的所有線程,包括調(diào)用J2EE應(yīng)用的線程。為了方便查找,Call Graph下面有"Method List"。
當(dāng)分析性能時(shí),在定位J2EE應(yīng)用的入口點(diǎn)和排除與WebLogic線程有關(guān)的數(shù)據(jù)方面, Call Method是最有效的。在分離出應(yīng)用的數(shù)據(jù)基礎(chǔ)上,可快速畫出執(zhí)行流程,并用圖形清晰地顯示出來。
下面是使用Call Method的有效技巧:
1. 選中你的snapshot,打開"Call Graph" 。
2. 點(diǎn)擊"Find"并且定位你的J2EE應(yīng)用的入口位置。 通常是servlet中的doGet()或doPost()方法。
3. 選擇方法并分離出數(shù)據(jù)形成圖形 。
4. 顯示方法的一個(gè)子集作為開始,這些方法按照"Cumulative Time"排序是最耗時(shí)的方法。當(dāng)你分析一個(gè)方法,在方法的調(diào)用樹上將增加額外的節(jié)點(diǎn)。
5. 在"Method List"中,根據(jù)你發(fā)現(xiàn)的瓶頸位置,在"Color By"的下拉列表中選擇相同度量值。根據(jù)你選擇的度量值,現(xiàn)在最耗時(shí)的方法都以鮮艷的顏色突出顯示出來。
6. 選擇最耗時(shí)的方法。展開父方法樹(通過點(diǎn)擊節(jié)點(diǎn)部分或節(jié)點(diǎn)左邊部分的空箭頭記號(hào)),就能看到哪個(gè)方法調(diào)用它了。你可以調(diào)用不同的,耗時(shí)比較少的方法嗎?你需要經(jīng)常調(diào)用這些方法嗎?
7. 展開子方法樹(指向節(jié)點(diǎn)的右邊),可以看到調(diào)用了哪個(gè)耗時(shí)的方法。還有哪些子方法也是耗時(shí)的呢?你意識(shí)到第三方的方法實(shí)際的耗時(shí)情況嗎?你能調(diào)用一個(gè)實(shí)現(xiàn)了更有效率算法的不同方法嗎?
圖11 JProbe Profiler Call Graph窗口
3.2.3.4 Method Detail View
從Method List或Call Graph中,你都能深入地分析,在一個(gè)視圖中很方便地看到耗時(shí)的方法的度量值,還有它們子方法和父方法的度量值。選擇方法并打開"Method Detail View" 。
"Method Detail View"(見圖12)在窗口的中心顯示了選擇方法,它的父方法在上面,它的子方法在下面。我們對(duì)列的頭部已經(jīng)熟悉了,它們和你在其它工具中看到的度量值相同。一個(gè)重要的區(qū)別是:用于顯示父方法和子方法度量值表示對(duì)所選方法的貢獻(xiàn)值,不是對(duì)它們自己的度量值。所以,如果一個(gè)方法被調(diào)用了12次,這些調(diào)用它的方法,和12次調(diào)用分別顯示在父方法的圖中。如果你想繼續(xù)分析父方法或子方法,雙擊該方法,使該方法在"Method Detail View"的中心顯示。
圖12 JProbe Profiler Method Detail窗口
3.2.3.5 Source Window
要查看你方法中的代碼,選擇方法并且打開Source Window。你需要指出你的源代碼具體位置。
如果你是按行收集數(shù)據(jù),你能在Source Window(見圖12)中看到這些數(shù)據(jù)。在左列中,顯示了每條語句的數(shù)據(jù)度量值。行級(jí)度量值是方法級(jí)度量值的細(xì)化,包括調(diào)用次數(shù),執(zhí)行該行的時(shí)間,執(zhí)行該行時(shí)創(chuàng)建的對(duì)象數(shù)量,累積時(shí)間和累計(jì)對(duì)象數(shù)量。
提示:如果需要編輯你的代碼,并且已經(jīng)把集成開發(fā)環(huán)境IDE和 JProbe Profiler集成在一起了,你可以通過選擇Edit>Edit Source打開你的集成開發(fā)環(huán)境。當(dāng)然,需要運(yùn)行你重寫的代碼,并建立新的JProbe Profiler分析會(huì)話時(shí),你做的改變才反映在JProbe Profiler上。
圖13 Jprobe Profiler Source Window
上述內(nèi)容就是Quest JProbe最佳實(shí)踐的示例分析,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。