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