1. 程式人生 > >JProbe 8.0:Java程式碼、記憶體及覆蓋率分析王者回歸

JProbe 8.0:Java程式碼、記憶體及覆蓋率分析王者回歸

一、總述

    當多個使用者使用java開發的應用程式時,應用程式的可靠性和伸縮性就可能會給可用性帶來風險,出現效能瓶頸、記憶體洩漏、程序已經為測試程式碼等問題。只可以利用與java涉及的解析器。內容包括:效能分析、記憶體糾錯、程式碼覆蓋、執行緒分析。

   功能:

1.      輕鬆發現和消除效能瓶頸;

2.      查詢問題程式碼;

3.      節省後續硬體的開打投入;

4.      與開發過程整合,改善應用效能。

   它取決與你在你的應用中遇到問題的型別。

1.      如果你的應用比較猛烈的,你可以先用記憶分析器(Memory analysis);

2.      如果你的應用是需要掛起的,一個可以進行死鎖分析的效能分析器

(Performance)是一個比較好的開始。

3.      如果你的應用比較遲鈍,我們將安逸利用一個記憶分析器跟隨一個性能分析器。因為,一個記憶體洩漏最終會引起伺服器執行猛烈。所以,你將首先提出這個問題。在你的程式碼在整個應用環境中執行工作後,效能分析器可以幫助你調整(測試)你的應用是如何走的。

4.      覆蓋分析(corverage analysis)可以在任何時候起作用。

記憶分析器是可以幫助開發人員快速查詢java程式碼的記憶體洩漏和物件迴圈。內建的圖形化實時記憶體使用和物件試圖,有助於開打人員理解應用的記憶體使用,設法減少記憶體消耗以提高應用效能。

記憶分析工具可以幫助你在你的JAVA應用中去改善記憶體使用,減少不必要垃圾收集。當你執行的時候,你用執行時間摘要檢視檢視整體記憶方案的行為,找出導致記憶體洩漏或者記憶體溢位的類。之後你利用一個記憶快照捕獲輸入的資料,再用堆調查工具,從檢視引用開始,分析鑑定洩漏例子,然後找到他們被分配的地方或者找到導致記憶體溢位的源物件。

3.1主要功能:

1.              識別記憶體洩漏:通過醫用的兩份分析,跟蹤執行時的記憶體增長。Memory Instance Caculator(計算記憶體洩漏量)

2.              智慧化記憶體分析:通過Leak Doctor發現可能的記憶體洩漏;

3.              Aggregate  Memory Footprint:理解物件建立的實際開銷;

4.              Reference Graph 和 Instance Detail:跟蹤記憶體使用和物件引用;

5.              垃圾回收分析:檢測過多的短期物件和垃圾及詳情;

6.              Snapshot比對:確定程式碼改變對記憶體使用的影響。

3.2使用步驟及說明:

1.建立記憶分析案例。

(1)進入JProbe Console。

(2)點選按鈕。進入下圖。

(3)選擇下的。點選【add】按鈕。

      說明:本機測試環境使用的是tomcat 6.0。

(4)選擇所選擇tomcat路徑,點選【next】按鈕。

(5)選擇Java jdk路徑,點選【next】。

 說明:測試自己所寫java程式時使用。

(6)持續點選【next】按鈕。

說明:在使用Memory分析器時,此處可以為空。如果filter下有所測試的檔案包,那麼在執行時,memory則會跳過記錄該檔案包下的程式碼。說明:此處可以選擇分析器種類。我直接選擇memory,點選【next】按鈕。

說明:本圖中,“JProbe Options”在大部分分析測試中可置空,但是他是有用的,你可以通過它來更改建立快照的目錄。

(7)輸入資訊完成。

說明:此處可以檢視所選擇的限制資訊。點選【save】按鈕。

(8)儲存專案資訊jpl檔案,路徑可以指定。

(8)設定完成。選擇“Integer”,點選【Finnish】按鈕。

說明:Continue表示重新輸入設定資訊;Integer表示設定完成。

(9)建立JProbe 啟動TOMCAT指令碼路徑。點選【save】按鈕。

(10)開始執行。點選【close】按鈕。Memory執行。

2.程式碼錄製

    (1) 在上一部分中的(10)進行完成後.點選下圖中的.

(2)之後出現如下圖.”Host Name/IP Address”輸入所監控的tomcat的IP,本地直接用“localhost”。點選[確定]按鈕。

(3)開始監控。

3.記憶體監控資料分析

記憶體分析工具主要有以下三個:MemoryPools Tab、GC Date Tab、Heap Date Tab。

(1)       Memory Pools

MemoryPools展現的是記憶體的歷史使用和記憶體池的共同可用記憶體,可用部分是記憶體池所有可用部分的總和.當你執行一個session時,概括圖形表現的是堆記憶體預設的大小。

點選,可以配置堆池或者非堆池。堆池(heap pools)包括的是在java中通常就可以發現的事情,比如java物件。非堆池(Non-heap)通常包括的是JVM內部呼叫的東西,比如編譯提示的方法程式碼或者類資訊。

點選此處,可以切換圖形統計時間。可以同步到GC tab。

Heap pools:

TenuredGen是一直存在的舊的存在;

EdenSpace 和 Survivor Space共同代表新的產生。Eden Space表示生成程式碼時呼叫的記憶體;SurvivorSpace表示還在使用得記憶體,存活的程式碼呼叫。

AvailableMemory用來表示,已經使用的和待使用的之間的差異。

Non-heap:

Codecache:還在緩衝儲存區中的程式碼

Permgen:正在呼叫的程式碼。

(2)       GC data

GCdata包括一個圖形和一個表。影象表示的是當應用發生時,每種型別的垃圾回收。圖形表示垃圾回收與程式執行時經過的時間百分比。如果百分比過大,您可能需要調整GC配置,或者減少物件迴圈。表提示的是每次垃圾回收故障之間的時間間隔等。

JProbe依賴於JRE,骨灰存在垃圾回收情形。GC採用copy記憶體,只會記錄活動的專案記憶體,放在指定記憶體的位置。在程式執行後會產生一些活動的專案,也佔有一定記憶體,這是GC會清理不活動專案,垃圾回收。

(3)       Heap Data

   調查表將選出呼叫佔有率最高的五個類別。每個類別可以通過直接點選進入檢視。

   Heap Date包括以下一型別:

1.  Recorded Count

2.  Recorded Memory

3.  Heap Count

4.  Heap Memory

5.  Dead COUNT

6.  Dead Memory

Recorded count/ Recorded Memory :在隨後的仕途中檢視已記載過的資料;

Heap Count/Heap Memory:在隨後的檢視中檢視輸入的堆資料;

Dead Count/Dead Memory:在隨後的檢視中檢視垃圾資料。之後點選顏色說明,可檢視該垃圾資料的痕跡;

Record Count/Record Memory:檢視其詳情;

Heap Count/Heap Memory:考慮在堆中的所有例子,而不是僅僅看見的記錄。

       點選按鈕,檢視執行呼叫到的類。

互動記憶執行時間摘要檢視

(1)       Display non-heap data:展示非堆資料,點選按鈕,可以選擇非堆選項。這項操作不是對所有JVMs有影響。

(2)       修改垃圾回收和記憶體池的時間間隔:點選

(3)       改變資料記錄水平或加一個濾波器:點選,開啟記錄水平對話方塊,修改收集選擇資訊型別,或者申請濾波器來指定表中的範圍

(4)       在堆頁中顯示執行時間的資料。點選;

(5)       申請一個堆的垃圾回收:點選,結果可以在GCTAB裡面檢視。

(6)       拍照:點選,等待左上角出現拍照記錄,之後可以點選記錄,檢視拍照資料,進行分析。

(7)       檢視執行日誌:點選,檢視執行記錄日誌資料。

(8)       建立報表:點選,可以匯出執行資料報表。

(9)       將圖表儲存為PNG或者JPEG檔案。將滑鼠點選到需要儲存圖片的圖表上,右鍵選擇要儲存的圖片型別。以及儲存的圖片的位置。

(10)   匯出資料到CVS格式:將滑鼠點選到需要儲存圖片的圖表上,右鍵選則exportto CVS,在匯出對話空選擇位置,名稱等。匯出後,可用excel檢視資料。

拍照分析:

      快照一般包括以下資料:JVM的堆(包括所用用例、他們的關係、以及他們關係的物件);特定用例的記錄資料(當地時間、遺蹟、被回收的用例)。這些資訊取決於初始時對記錄項的選擇。

1.  點選,若其變為,則表示正在拍照中。

2.  拍照成功後,雙擊左上角的快照名稱,等待生成快照資料。選擇拍照的資料越少,速度也也快,也越容易分析。

3.  拍照成功後,得到以下圖片

5.      選擇需要檢視的類,點選,得到該類詳情,如下圖。

6點選,檢視關係圖。

JProbe Performance主要用來檢視記憶體使用情況和流線型垃圾回收。資深開發工程師一般在程式開發的最後階段使用Performance,用來提高程式的效率。Performance在程式中最大的亮點就是幫助你確定程式的瓶頸,比如運算太慢或者過程太長導致的阻塞等。要分析方案執行結果,你必須是一個擁有深厚的構建知識,並且能夠預見方案的行為的資深軟體開發師。

This information displaysin several Performance views including the Call Graph, Method Detail, SnapshotDifference, and Performance Report.

在設定Performance時,前面的設置於Memory類似。但是下圖中的資料必須全部填寫。

1.             general:分為兩部分Timing和deadlockdetection,及基準時間與死鎖發現。Timing時間基準可以選擇elapsed(程式經過的時間)或者CPU;deadlockdetection可選擇也可以不選擇。

2.             filters:選擇監控的程式碼包或者方法等;此部分的程式碼需要在前面設定;

3.             automation:選擇關聯到的方法。

程式碼錄製級別:

Data recording off:在開始調查程式的時候,你是不知道程式的效能瓶頸的,但是這個程度就已經夠找到效能瓶頸了;

No Encapsulation:只能夠收集到filters裡面的方法程式碼;

Grouped Encapsulation:可以收集到你的方法資料以及方法呼叫到的編譯資料;

Full Encapsulation:收集到所有方法,以及方法所呼叫到的方法。

除非你選擇“data recording is off”,否則一旦你點下OK,那麼資料就開始記錄。

設定好,執行後,進入performance執行視窗。

Performance頁只包括Memory pools 和GC data 兩部分。

利用performance的第一步是儲存基準照片(資料)即Saving Baseline Snapshots。在做壓力測試時,最重要的就是發現程式瓶頸。此問題可以在這裡得到實現。

首先,建立一個基準資料(照片)。執行一個正常的步驟,一個使用者就可以了。然後拍照,作為基準資料;(你可以多執行幾次,用一個差不多穩定的作為基準)

然後,捕捉壓力效能測試時的資料(照片)。在程式執行壓力測試時,拍照。

最後,對比基準資料與效能測試時的資料,以此來找到程式的效能瓶頸。

具體操作為,右鍵需要對比的照片,點選其“snapshot Differencing…”,然後會出現對話方塊:選擇基準資料與對比資料。

選擇完成之後,點選【ok】按鈕。出現對比類的對比資料列表。

基準計較型別:

1.      number of calls:方法被呼叫的次數;

2.      method time:方法持續花費的時間,不包括呼叫的其他方法花費的時間;

3.      number of catches:達到例外的方法次數;

4.      Number of Exception Exits:排除特例的方法次數。

三準途徑簽定潛在瓶頸:

一、尋找麻煩關鍵點;點選照片右鍵選擇“open call graph view”,根據自己的經驗判斷哪些資料有可能有問題。

二、尋找麻煩關鍵點的關鍵路徑;

三、利用導航圖(Navigating the Call Graph)尋找麻煩關鍵點。

    覆蓋分析器可以幫助開發人員查詢為執行程式碼,精確計算一致性程式碼,簡化對測試工作可靠性和精確度的評估。但是,他不可以分析程式碼迴圈。

5.1主要功能:

1.      Coverage Browser和Source Views:迅速確定為測試程式碼和死程式碼;

2.      Conditional Coverage Analysis:分析特定條件所覆蓋的程式碼範圍,包括含有多個條件語句的程式碼行;

3.      Filter Catch Blocks:更精確的覆蓋範圍報告;

4.      批發處理模式:可通過批處理方式執行,簡化夜間編譯/測試系統的整合;

5.      報表功能:以XML、純文字、CSV或者HTML格式輸出覆蓋範圍報告,以實現個性化的分析;

6.      Snapshot合併:對多次執行中的覆蓋範圍資料進行合併。

5.2使用步驟及說明:

Coverage 配置方式與Performance類似。

    程式碼覆蓋測試一般以以下為預設設定。

• General > Line:JProbe tracks which lines of code in your application are called

during your test case.Conditions are not tracked.按行追蹤應運,但是條件不追蹤。

• Filters: JProbe usesyour application filters as the default data collection filters.以配置的我的程式碼資料夾部分作為漏斗。

• Automation >Initial Recording at JVM Start: Data Recording On.

 (1)配置完成後,直接點選開始執行。進入以下視窗

(2)拍照或者,停止執行後系統自動拍照。雙擊所拍的照片。