目錄
一、概述
二、兩種資料采集方式
三、VM遙感監測視圖中相關監測資料
四、記憶體視圖(Live Memory)的分析
五、Heap Walker功能說明
六、CPU視圖功能說明
七、Threads視圖功能說明
一、概述
在運行Java的時候有時候想測驗運行時占用記憶體情況,這時候就需要使用測驗工具查看了,在eclipse里面有 Eclipse Memory Analyzer tool(MAT)插件可以測驗,而在IDEA中也有這么一個插件,就是JProfiler,JProfiler 是由 ej-technologies 公司開發的一款 Java 應用性能診斷工具,功能強大,但是收費,
特點:
- 使用方便、界面操作友好(簡單且強大);
- 對被分析的應用影響小(提供模板);
- CPU,Thread,Memory分析功能尤其強大;
- 支持對jdbc,noSql,jsp,servlet,socket等進行分析;
- 支持多種模式(離線,在線)的分析;
- 支持監控本地、遠程的JVM;
- 跨平臺,擁有多種作業系統的安裝版本;
主要功能:
- 1-方法呼叫:對方法呼叫的分析可以幫助您了解應用程式正在做什么,并找到提高其性能的方法;
- 2-記憶體分配:通過分析堆上物件、參考鏈和垃圾收集能幫您修復記憶體泄露問題,優化記憶體使用;
- 3-執行緒和鎖:JProfiler提供多種針對執行緒和鎖的分析視圖助您發現多執行緒問題;
- 4-高級子系統:許多性能問題都發生在更高的語意級別上,例如,對于JDBC呼叫,您可能希望找出執行最慢的SQL陳述句,JProfiler支持對這些子系統進行集成分析;
官網地址:Java Profiler - JProfiler
二、兩種資料采集方式
- Instrumentation(重構模式)
這是JProfiler全功能模式,在class加載之前,JProfier把相關功能代碼寫入到需要分析的class的bytecode中,對正在運行的jvm有一定影響,
- 優點:功能強大,在此設定中,呼叫堆疊資訊是準確的,
- 缺點:若要分析的class較多,則對應用的性能影響較大,CPU開銷可能很高(取決于Filter的控制),因此使用此模式一般配合Filter使用,只對特定的類或包進行分析,
- Sampling(樣本采集)
類似于樣本統計,每隔一定時間(5ms)將每個執行緒堆疊中方法堆疊中的資訊統計出來,
- 優點:對CPU的開銷非常低,對應用影響小(即使你不配置任何Filter);
- 缺點:一些資料/特性不能提供(例如:方法的呼叫次數、執行時間);
注:JProfiler本身沒有指出資料的采集型別,這里的采集型別是針對方法呼叫的采集型別,因為JProfiler的絕大多數核心功能都依賴方法呼叫采集的資料,所以可以直接認為是JProfiler的資料采集型別,
如下圖,當我們打開JProfiler時,會彈出選擇哪一種資料采集方式:

下圖是樣本抽樣采集方式:
三、VM遙感監測視圖中相關監測資料
【a】概覽:展示記憶體、GC、類、執行緒、CPU等使用情況 
【b】記憶體:可以選擇不同記憶體區域查看其使用情況,使用不同顏色區分空閑記憶體和已使用記憶體

【c】GC:顯示垃圾回識訓動,包括物件釋放的一條線和物件移動的一條線
【d】類資訊:顯示 JVM呼叫的類的總,分為過濾類和非過濾類
【e】執行緒:顯示 JVM中活著的執行緒總數,分為活動的執行緒和不活動的執行緒
【f】CPU:展示CPU利用率變化情況
四、記憶體視圖(Live Memory)的分析
JProfiler 的記憶體視圖部分可以提供動態的記憶體使用狀況更新視圖和顯示關于記憶體分配狀況資訊的視圖,所有的視圖都有幾個聚集層并且能夠顯示現有存在的物件和作為垃圾回收的物件,
(一)、所有物件 All Objects:顯示所有加載的類的串列和在堆上分配的實體數,只有Java 1.5 (JVMTI)才會顯示此視圖,要查看特定時間段物件的分配,并記錄分配的呼叫堆疊,請使用“記錄的物件視圖”,
有一個集合體等級選擇器,你可以在以下幾種型別中切換:
- 類(classes):每一行顯示一個單獨的類,這是默認的集合體型別
- 包(packages):每一行顯示一個單獨的包,子包不包含在內,在這個集合體等級內,表是樹形的,你可以點擊樹節點,查看其包含的類
- J2EE組件( J2EE components):每一行是一個 J2EE組件,此模式類似類模式中的過濾器,能夠讓你快速檢查應用中加載的 J2EE組件,

(二)、記錄物件 Record Objects:查看特定時間段物件的分配,并記錄分配的呼叫堆疊,
記錄的物件視圖可以根據物件的活動狀態進行過濾:
- 活動物件(Live objects) 只顯示當前在記憶體中的物件;
- 垃圾回收物件(Garbage collected objects) 被顯示被回收的物件;
- 活動的和垃圾回收物件(Live and garbage collected objects) 顯示所有被創建的物件;
(三)、分配訪問樹 Allocation Call Tree:顯示一棵請求樹或者方法、類、包或對已選擇類有帶注釋的分配資訊的J2EE組件,
(四)、分配熱點 Allocation Hot Spots:顯示一個串列,包括方法、類、包或分配已選類的J2EE組件,你可以標注當前值并且顯示差異值,對于每個熱點都可以顯示它的跟蹤記錄樹,
(五)、類追蹤器 Class Tracker:類跟蹤視圖可以包含任意數量的圖表,顯示選定的類和包的實體與時間,
五、Heap Walker功能說明
這個視圖主要追蹤應用程式運行程序中堆記憶體的使用情況,如下圖:
【a】類(Classes):顯示所有類和它們的實體 
【b】索引(References):為單個物件和“顯示到垃圾回收根目錄的路徑”提供索引圖的顯示功能,還能提供合并輸入視圖和輸出視圖的功能

六、CPU視圖功能說明
JProfiler 提供不同的方法來記錄訪問樹以優化性能和細節,執行緒或者執行緒組以及執行緒狀況可以被所有的視圖選擇,所有的視圖都可以聚集到方法、類、包或J2EE組件等不同層上,
(一)、訪問樹 Call Tree:顯示一個積累的自頂向下的樹,樹中包含所有在JVM中已記錄的訪問佇列,JDBC,JMS和JNDI服務請求都被注釋在請求樹中,請求樹可以根據Servlet和JSP對URL的不同需要進行拆分, 
(二)、熱點 Hot Spots:顯示消耗時間最多的方法的串列,對每個熱點都能夠顯示回溯樹,該熱點可以按照方法請求,JDBC,JMS和JNDI服務請求以及按照URL請求來進行計算,
(三)、 訪問圖 Call Graph:顯示一個從已選方法、類、包或J2EE組件開始的訪問佇列的圖,
(四)、 方法統計 Method Statistis:顯示一段時間內記錄的方法的呼叫時間細節,
七、Threads視圖功能說明
JProfiler通過對執行緒歷史的監控判斷其運行狀態,并監控是否有執行緒阻塞產生,還能將一個執行緒所管理的方法以樹狀形式呈現,方便對執行緒進行剖析,
(一)、執行緒歷史 Thread History:顯示一個與執行緒活動和執行緒狀態在一起的活動時間表,按照執行緒開始的順序顯示 JVM中所有執行緒狀態的詳細歷史資訊在視圖左手點,執行緒的名字固定顯示,其它部分是滾動度量工具,在水平軸上顯示時間,時間軸的開始時間與 JVM的第一個執行緒的時間保持一致,每個活動的執行緒用帶顏色的線標明,從執行緒開始到執行緒結束,
- 顏色標識執行緒的狀態:
- 綠色:綠色表明執行緒正在運行并能接收 CPU時間,不表明執行緒正在消耗 CPU時間,只表明執行緒準備運行并且沒有阻塞或睡眠,執行緒被分配了多少 CPU時間,依賴于不同的其它因素,如總的系統負載,執行緒優先級和調度的運演算法則
- 橙色:橙色表示執行緒在等待,執行緒正在睡眠并等待計時器或其它執行緒喚醒
- 紅色:紅色表示執行緒阻塞,執行緒嘗試進入同步代碼區或由其它執行緒控制的同步方法
- 藍色:亮藍色表示執行緒在 Net I/O操作,執行緒在等待 JAVA庫的網路操作完成,在執行緒監聽 socket連接或者等待讀寫資料到 socket中時,會產生這種狀態,

(二)、 執行緒監控 Thread Monitor:顯示一個串列,包括所有的活動執行緒以及它們目前的活動狀況,
顯示的五列:
- Name:顯示執行緒名稱,如果執行緒沒有被特別命名,則使用 JVM提供的名稱,想讓此視圖更加有用,最好將你自己創建的執行緒使用 setName() 進行命名,
- Group:顯示與此執行緒相關的執行緒組的名稱
- Start time:示執行緒開始的時間,時間是根據 JVM中第一個執行緒創建的時間還計算的,
- Creating thread:顯示執行緒的名字和創建此執行緒的執行緒組,
- Status:顯示執行緒的狀態,相當于執行緒歷史視圖中的狀態報告

(三)、執行緒轉儲 Thread Dumps:顯示所有執行緒的堆疊跟蹤,
執行緒分析主要關心三個方面:
1.web容器的執行緒最大數,比如:Tomcat的執行緒容量應該略大于最大并發數;
2.執行緒阻塞;
3.執行緒死鎖;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301493.html
標籤:其他
上一篇:【鴻蒙應用開發】-入門
