本文通過介紹Optimizeit Profiler的一些主要特征來使你對(duì)它有個(gè)簡(jiǎn)要的了解。如果想要知道更多的信息,請(qǐng)查看Optimizeit Profiler用戶手冊(cè)。可以從Optimizeit Profiler單擊主菜單info|help來查看所有的使用文檔。
使用中有何問題,請(qǐng)隨時(shí)與Borland Technical Support聯(lián)系。
啟動(dòng)應(yīng)用程序
Optimizeit Profiler是通過在一個(gè)獨(dú)立的虛擬機(jī)上運(yùn)行應(yīng)用程序來收集有用的信息。
在運(yùn)行一個(gè)java程序前,需要安裝一個(gè)java虛擬機(jī)。Optimizeit Profiler默認(rèn)配置是JDK 1.4 or 1.4.1。如果你想使用的另外的虛擬機(jī),可以查看Optimizeit Profiler用戶手冊(cè)中的如何增加額外的虛擬機(jī)部分。
Optimizeit Profiler可用來測(cè)試任何類型的java程序:標(biāo)準(zhǔn)的應(yīng)用程序、應(yīng)用小程序、servlets、jsp,ejb等。本文所使用的都是演示程序,包含在Optimizeit quichktour目錄下。文中所有的演示均可以此來完成。
1、 打開Optimizeit Profiler;
2、 如果你是第一次打開,將會(huì)自動(dòng)彈出編輯設(shè)置窗口。如果已經(jīng)打開,可以從file菜單下選擇new setting,調(diào)出編輯設(shè)置窗口。
3、 在程序類型框中選擇Application。
4、 單擊"Program main class or Jar file"右面的“Browse…”按鈕。
5、 找到\doc\profiler\quicktour\QuickTourApp.jar文件,然后單擊open。
6、 Profiler會(huì)返回到設(shè)置窗口,并且自動(dòng)帶入程序的工作區(qū)和類路徑。在Source Path框中,單擊change…按鈕。
7、 在Source path chooser窗口中,選擇安裝路徑下的\doc\profiler\quicktour目錄;選中\doc\profiler\quicktour\QuickTourApp.jar文件后單擊窗口中的向下按鈕把它加入到source path部分。
8、 單擊ok增加到源文件中路徑中。設(shè)置好后的對(duì)話框如下:
9、 單擊Start now按鈕。
10、 編輯窗口會(huì)自動(dòng)關(guān)閉,并且Optimizeit Profiler自動(dòng)加載事例程序。
使用Memory Profiler
當(dāng)你是第一次使用該工具,Optimizeit自動(dòng)打開到內(nèi)存監(jiān)視窗口:
內(nèi)存監(jiān)視器列出了被測(cè)程序中所有的類并且實(shí)時(shí)統(tǒng)計(jì)每個(gè)類的實(shí)例的數(shù)目。內(nèi)存監(jiān)視器默認(rèn)是以堆模式打開,這樣能夠看到對(duì)象的創(chuàng)建和撤銷。下面的步驟將演示將介紹如何控制內(nèi)存監(jiān)視器以便于分析被測(cè)程序的內(nèi)存使用情況:
1、 單擊內(nèi)存監(jiān)視器表頭的instance count。這樣將按照已分配的實(shí)例數(shù)來進(jìn)行降序排列。
2、 在內(nèi)存監(jiān)視器窗口下方的Filters窗口中,輸入你想觀察的某個(gè)類,在filters框中輸入Java.awt.*,并且按回車鍵;這樣將只顯示java.awt類的相關(guān)信息。
3、 我們可以看到,許多類的實(shí)例數(shù)要么增加,要么減少。增加是因?yàn)橛袑?shí)例生成,而減少是因?yàn)槔厥赵谄鹱饔谩H绻榭磁R時(shí)對(duì)象的創(chuàng)建,可以選中窗口右側(cè)底部的Disable garbage collector按鈕,這樣Optimizeit將一直持續(xù)顯示所有實(shí)例的數(shù)目。
4、 選中java.awt.Color類,然后單擊Allocation Backtrace 按鈕進(jìn)入allocation backtrace 模式。你也可以在類名上雙擊進(jìn)入。Backtrace信息顯示了類的每個(gè)實(shí)例中的方法被調(diào)用的信息。
5、 在Allocation Backtrace視圖中,可以以兩種方式來查看信息:
l Hierarchical view分層模式 默認(rèn)顯示樹形圖。在樹形圖中,某個(gè)方法可能顯示在多個(gè)地方,在于誰調(diào)用了這個(gè)方法。但是在圖形視圖中,節(jié)點(diǎn)表示的方法僅顯示一次。它仍然可以有多個(gè)父路徑。
l In the Aggregated view圖表模式 每個(gè)節(jié)點(diǎn)將使用線連接起來,或者是到了邊界只有一邊有線。從有多個(gè)子節(jié)點(diǎn)開始,每條連線對(duì)應(yīng)一個(gè)調(diào)用這個(gè)方法的方法。與樹形不同的是,圖表中可能存在循環(huán)。圖表顯示有助于進(jìn)行跟蹤。如果你想找出一條語句是如何被調(diào)用的,那么圖表將是一種快速而簡(jiǎn)易的方法,通過圖表你可以迅速地找出有父子關(guān)系的對(duì)象。
可以使用按鈕在兩種方式之間切換。
6、 選中EventDispatchThread.run()行,單擊左邊的加號(hào)展開。單擊比率最大的節(jié)點(diǎn),直到展開Graphics2d.fill3DRect()
行為止。
7、 雙擊Graphics2d.fill3DRect()行,將顯示顏色實(shí)例分配的源代碼。源代碼將有助于你理解為什么繪制路徑類產(chǎn)生了如此多的實(shí)例。fill3DRect方法分配了許多的顏色,是因?yàn)樗{(diào)用了Color.brighter()
方法and Color.darker()
方法
。
注意:如果你是第一次使用者,你可能沒有圖中的源代碼路徑。
使用內(nèi)存監(jiān)視器,可以幫助你創(chuàng)建更少的臨時(shí)對(duì)象。雖然臨時(shí)對(duì)象經(jīng)常很快便被析構(gòu),然而它會(huì)導(dǎo)致垃圾收集更加頻繁。對(duì)于大多數(shù)java虛擬機(jī)來說,當(dāng)垃圾收集器比較忙時(shí),運(yùn)行任何的java程序都會(huì)延遲幾百毫秒。如果使用了過多的臨時(shí)對(duì)象,由于這個(gè)原因會(huì)致使用戶感覺到程序反應(yīng)緩慢。
內(nèi)存監(jiān)視器同時(shí)有助于理解為什么垃圾收集器沒有析構(gòu)這些對(duì)象。例如,它將幫助我們我們了解當(dāng)一個(gè)對(duì)象不再被使用時(shí)確實(shí)被垃圾收集器析構(gòu)掉。下面的步驟描述了使用內(nèi)存監(jiān)視器來判斷一個(gè)實(shí)例的產(chǎn)生和如何被垃圾收集器收集。
1、 單擊圖標(biāo)返回到堆模式。
2、 為了只顯示與Image-related相關(guān)的類,可以清除fileters框中的內(nèi)容,然后輸入*image*,然后按回車鍵。
3、 選中javax.swing.ImageIcon行,然后單擊圖標(biāo)
(顯示實(shí)例和參考圖),顯示出了實(shí)例圖:
窗口的上方顯示了實(shí)例的字符描述。
窗口中間部分顯示了所選實(shí)例對(duì)象參考和由對(duì)象所派生的實(shí)例。在這種情況下,因?yàn)?/span>ImageIcon對(duì)象被引用了,所以垃圾收集器沒有收集。
窗口最下方部分顯示了中間窗口所選實(shí)例的分配路徑。可以看出實(shí)例是構(gòu)造器QuickTourApp分配的。這個(gè)圖像就是作為背景顯示在程序中間的Optimizeit的logo。
內(nèi)存泄漏經(jīng)常是由于在程序運(yùn)行中連續(xù)地引用對(duì)象,因此他們?nèi)匀徽加觅Y源。正因?yàn)槿绱耍绻隳軌蚨ㄎ坏绞褂么罅恳玫膶?duì)象,那么你就能夠定位至對(duì)象占用資源導(dǎo)致內(nèi)存泄漏的根源。為了能夠定位到使用大量引用的對(duì)象,并且跟蹤這些引用:
1、 打開內(nèi)存泄漏檢測(cè),單擊內(nèi)存泄漏監(jiān)測(cè)按鈕 。
2、 為了查找可能的內(nèi)存泄漏,Profiler需要比較一系列堆的狀態(tài)。可以單擊保存堆狀態(tài)按鈕 來創(chuàng)建。
3、 讓quicktour程序運(yùn)行15秒以上。
4、 再次單擊保存堆狀態(tài)按鈕記錄一個(gè)新的堆狀態(tài)記錄。你可以創(chuàng)建多個(gè)堆狀態(tài)記錄。
5、 From heap state表中為要作為比較的初始狀態(tài),To heap state表中為要與From heap state作比較的狀態(tài)。每當(dāng)選中From heap state表中的記錄后,To heap state表中只能選擇該記錄之后的記錄。
6、 窗口的中間部分顯示了被比較堆狀態(tài)記錄之后新引用的資源。Count值是這個(gè)對(duì)象遞增引用的數(shù)量。可以單擊count表頭進(jìn)行排序。你可以選擇一個(gè)引用來查看堆狀態(tài)中所有與這個(gè)對(duì)象引用有關(guān)的對(duì)象引用。
7、 圖中的對(duì)象將有連接線或者邊界。從根節(jié)點(diǎn)開始,都有一個(gè)相應(yīng)的引用。把鼠標(biāo)移到節(jié)點(diǎn)上面,將會(huì)顯示新引用的數(shù)目和該節(jié)點(diǎn)調(diào)用toString()的。把鼠標(biāo)移到末級(jí)節(jié)點(diǎn)上,將會(huì)顯示這個(gè)引用的實(shí)例變量名。
8、 在圖的上方有兩個(gè)滾動(dòng)條:
使用詳細(xì)程度滾動(dòng)條來調(diào)節(jié)圖表顯示的詳細(xì)程度。
使用縮放滾動(dòng)條來調(diào)節(jié)圖表顯示的大小。
所有不同的顏色代表不同的意思:
l 藍(lán)色節(jié)點(diǎn)為間接引用句柄。表示不是直接引用,而是引用的引用。
l 紅色節(jié)點(diǎn)為引用句柄。表示是直接引用。
l 節(jié)點(diǎn)的引用越多,顏色越深。
l 后續(xù)連接顯示為綠色線條。后續(xù)連接在引用中對(duì)于一個(gè)對(duì)象是更高層次的引用。所有的后續(xù)連接的邊框?yàn)樗{(lán)色。在引用層次中前續(xù)連接是后續(xù)連接的一個(gè)引用。
l 當(dāng)選擇一個(gè)節(jié)點(diǎn)以后,與這個(gè)節(jié)點(diǎn)相關(guān)的引用將會(huì)閃爍顯示。
l 選中一個(gè)節(jié)點(diǎn)然后單擊鼠標(biāo)右鍵,將會(huì)在一個(gè)新的實(shí)例中打開所選擇的節(jié)點(diǎn)。
使用CPU Profiler
內(nèi)存監(jiān)視器有助于對(duì)對(duì)象的最小化使用。CPU監(jiān)視器將有助于你了解對(duì)象所使用的時(shí)間。CPU監(jiān)視器在java虛擬機(jī)中可被看作是一個(gè)記錄設(shè)備。下面的步驟描述了如何給出被測(cè)試程序的響應(yīng)時(shí)間和CPU使用率。
1、 單擊CPU監(jiān)視按鈕切換到CPU監(jiān)視界面。
2、 單擊開始CPU 監(jiān)視按鈕開始記錄程序的CPU使用率。
3、 讓程序運(yùn)行一段時(shí)間(比如三秒以上)。
4、 單擊停止CPU監(jiān)視按鈕停止記錄。CPU監(jiān)視器顯示出了已經(jīng)記錄的CPU 使用信息。
5、 如果沒有選上,請(qǐng)選擇樹形格式,看到的信息是一樣的。
6、 單擊窗口上方的下拉框可以顯示出虛擬機(jī)當(dāng)前運(yùn)行所有的線程。
7、 選擇AWT-EventQueue-0
thread線程,該線程被AWT使用來處理時(shí)間,例如repaint事件。
8、 展開EventDispatchThread.pumpOneEvent()
行。
9、
單擊EventQueue.dispatchEvent()左方的加號(hào)展開所有的方法,直到展開到JComponent.paintWithBuffer()方法。行前面的圖標(biāo)所表示的意思為:
表示該方法直接被另外一個(gè)方法調(diào)用。
表示執(zhí)行時(shí)間最長(zhǎng)的方法。
在這個(gè)例子中AWT-EventQueue-0線程一直用處理repaint事件。
10、
選擇JComponent.paintWithBuffer()行。如果鼠標(biāo)移到JComponent.paintWithBuffer()所調(diào)用的方法上,將顯示在JComponent.paintWithBuffer()中該方法所使用的時(shí)間比例。
11、
如果要分析那個(gè)線程是空閑的,CPU監(jiān)視器可以同時(shí)顯示CPU使用率和使用時(shí)間。單擊inspector(tool菜單下)打開inspector對(duì)話框。
12、
不選中Ony record CPU usage,然后關(guān)閉窗口。使用這個(gè)特征來選擇緩沖策略,默認(rèn)顯示的是CPU純使用信息。
查看虛擬機(jī)信息
Optimizert提供了實(shí)時(shí)顯示與數(shù)據(jù)有關(guān)的高標(biāo)準(zhǔn)性能測(cè)試的信息。使用這個(gè)特點(diǎn),你可以了解到性能問題是和CPU有關(guān)還是和內(nèi)存有關(guān),或者與兩者都有關(guān)。
單擊
,切換到虛擬機(jī)模式。
在這種模式下,顯示四類性能圖標(biāo),每類圖表描述了虛擬機(jī)不同的活動(dòng)信息:
堆圖表:左上角的圖表中紅色線表示被測(cè)程序當(dāng)前需要的堆棧的大小,綠色表示被測(cè)程序?qū)嶋H使用的堆棧的大小。
垃圾收集圖表:有上角的圖中顯示當(dāng)前垃圾收集器的活動(dòng),顯示了垃圾收集時(shí)間占總時(shí)間的比例。有助于觀察垃圾收集器使用的頻率和時(shí)間。
線程圖:左下角的圖中紅色線表示當(dāng)前運(yùn)行的線程,綠色表示大多數(shù)的線程使用CPU。
類圖:右下角的圖顯示了虛擬機(jī)當(dāng)前加載的類的數(shù)目。
查看測(cè)試結(jié)果
Optinizeit包含了許多方法來查看測(cè)試結(jié)果,就象上面的實(shí)時(shí)監(jiān)控方法成功一樣,也可以把所有的信息保存在一個(gè)快照中或報(bào)告中,這樣你就可以在以后分析結(jié)果或者和另外一個(gè)結(jié)果進(jìn)行比較。
例如,你可以把測(cè)試結(jié)果輸出為一個(gè)html文件。
1、 當(dāng)演示程序還在運(yùn)行時(shí),單擊CPU監(jiān)視器返回到CPU監(jiān)視界面。
2、 為了查看所有的信息,完全展開所有的方法。確認(rèn)你需要的信息都顯示在層次視圖中,因?yàn)檩敵鲋胁粫?huì)包含圖表。
3、 單擊輸出圖標(biāo)
打開輸出窗口:
4、 填寫標(biāo)題,檢查filename框中的路徑是有效的,并且選擇輸出為.html格式。
5、 單擊ok,Optimizeit會(huì)把結(jié)果輸出到定義的.html文件中,然后會(huì)自動(dòng)打開。
現(xiàn)在你就可以共享你的測(cè)試結(jié)果了。
本文只是Optimizeit Profiler的一個(gè)概覽。如果想要了解更多有關(guān)Optimizeit的信息,請(qǐng)查看Optizeit Profiler用戶指南。
---------------------------------------------------------------------------------------------------------------------------------
說人之短,乃護(hù)己之短。夸己之長(zhǎng),乃忌人之長(zhǎng)。皆由存心不厚,識(shí)量太狹耳。能去此弊,可以進(jìn)德,可以遠(yuǎn)怨。
http://m.tkk7.com/szhswl
------------------------------------------------------------------------------------------------------ ----------------- ---------
posted on 2007-12-13 09:11
宋針還 閱讀(557)
評(píng)論(2) 編輯 收藏 所屬分類:
開發(fā)測(cè)試工具