JProfiler學習筆記

轉自https://blog.gmem.cc/jprofiler-study-note
內存視圖(Memory Views)

該視圖專一於對象的內存分配狀況,包含如下選項卡:java

 All Objects 顯示堆中實時的對象狀況:顯示某種類型(聚合級別能夠是類、包等)對象的數量(Instance Count)、淺尺寸(Shallow size)關於淺尺寸的計算:

 

  1. 普通對象大小的計算不包括引用、類變量,由變量自己地址、基本類型的變量佔用的內存等組成
  2. 數組總體計算,不分爲單個元素計算大小/數量

注意,有些對象雖然沒有引用,可是可能沒被GC回收,能夠手工Run GCgit

右擊某一類型,能夠轉到Class Tracker或者Heaper Walker視圖github

Recorded Objects 顯示已經進行記錄的對象。與All Objects相比,能夠查看對象分配調用樹(Allocation Call Tree)、分配熱點(Allocation Hot Sports)點擊工具欄:Start Memory,能夠錄製對象分配
Allocation Call Tree 顯示選中的、已錄製對象類型的分配調用數,分析調用棧的哪些棧幀比較消耗資源。從線程執行開始處,一直追溯到對象被建立的地方,對象佔用內存的大小被顯示,效果以下圖:
Allocation Hot Sports 顯示選中的、已錄製對象類型的分配熱點:以建立對象的方法爲根顯示調用樹,效果以下圖:alloc-hotsopt
Class Tracker  顯示選中類型對象的實例個數的曲線圖(按時間)
堆遍歷(Heap Walker)

該視圖用於靜態分析堆快照,在生成快照以前,會進行一次Full GC。包含如下選項卡:算法

Classes 相似於Memory Views的All Objects,能夠顯示快照中全部對象的數量、大小。右擊選擇Use Selected Instances,則能夠顯示單種類型的數據
Allocations 分析對象分配狀況:包括4種顯示方式:Cumulated Allocation Tree:累積調用樹,顯示對象分配調用樹,包含對象sizeAllocation Tree:調用樹,顯示對象分配調用樹,包含對象sizeAllocation Tree Map:以Tree Map形式顯示調用樹Allocation Hot spots:顯示分配對象最多的方法
Biggest Objects 顯示佔用內存最多的對象
References 顯示單種類型的引用狀況包含4種顯示方式:Incoming references:其它對象對每個選中對象的引用Outcoming references:每個選中對象對其它對象的引用Cumulated Incoming references:顯示其它對象、字段對選中對象類型的整體引用統計Cumulated Outcoming references:顯示選中對象類型對其它對象、字段的整體引用統計
Time 分析對象分配的消耗時間
Inspections 提供多種精細的對象分配分析方式
Graph 圖形化方式顯示對象的引用圖
CPU視圖(CPU Views)

該視圖用於分析方法的CPU佔用時間,包括如下選項卡:windows

 Call Tree 顯示自頂而下的調用堆棧的樹,樹的根是線程開始處,樹的分叉表示的不一樣的調用路徑。暗紅色顯示當前節點及其子節點消耗的時間、高亮紅色顯示本級節點消耗的時間。

 

顯示未過濾類對過濾類的直接調用,不顯示深刻的調用,在被過濾類的左上角顯示紅三角。main方法、線程的run方法老是顯示,不予過濾。
經過Profiling Settings能夠選擇CPU時間的度量方式:Elapsed time/Estimated CPU time,前者爲Wall clock time(物理世界真實時間),後者爲佔用CPU的時間。因爲操做系統的固有限制,10ms如下的時間可能不具備統計學意義。
界面右上角的Thread Status用於選擇參與分析的線程狀態,一般選擇Runnable來分析性能問題,有時能夠結合Net I/O、Blocked
 
工具欄Start Tracking,能夠追蹤某些任務在不一樣線程之間的傳遞(調用點/執行點Call site/Execution site)

效果以下圖:
call-tree數組

 Hot Spots 顯示耗時最高的方法調用,顯示消耗時間、平均消耗時間、調用次數等字段,以耗時方法爲根,能夠追溯到線程啓動處Filtered Classes設置:選擇被過濾類佔用時間,能夠單獨列出,或者算在調用它的元素上(main、線程run不能過濾)
每一個方法可能被多個調用棧調用,百分比顯示不一樣調用棧對此方法的固有時間的「貢獻」
不顯示Total time,只顯示Inherent Time
Call Graph 顯示方法調用的序列,包括某個方法的調用與被調用狀況
Method Stat 點擊工具欄圖標,能夠錄製方法的統計信息並進行分析
Call Tracer 點擊工具欄圖標,能夠對方法調用進行跟蹤
線程視圖(Thread Views)

該視圖用於分析線程的狀態和歷史分析、檢測死鎖,並能夠獲取線程快照,包含如下選項卡:服務器

Thread History 線程狀態時間線,能夠選擇顯示活着的或者死去的線程

 

綠色:Runnable:表示線程能夠接受CPU調度,但不必定正在佔用CPU,和線程優先級、調度算法、系統負載有關
黃色:Waiting:表示線程正在睡眠(java.lang.Thread.Sleep),或者在監視器上等待(java.lang.Object.wait),前者不會放棄佔有的監視器
紅色:Blocked:表示線程被阻塞,正在積極嘗試進入同步區
淺藍色:Net I/O:線程正在等待網絡操做的完成,監聽Socket或者讀寫Socket時產生此狀態
效果圖以下:
thread-history
Thread Monitor 顯示線程的開始結束時間、父線程、狀態等信息
Thread Dumps 獲取線程快照,能夠分析瞬時系統各線程的調用棧
監視器視圖(Monitor Views)

該視圖用於鎖狀態檢測,包含如下選項卡:網絡

 Current Locking Graph 當前鎖狀態圖,顯示監視器、以及在監視器上等待的線程。

 

黑色箭頭表示當前擁有此監視器的線程app

紅色虛線表示被阻塞的線程(積極嘗試得到鎖)工具

黃色箭頭表示在監視器上等待的線程(java.lang.Object.wait)

效果圖以下:

current-monitor

Current Monitors 顯示當前活動的監視器,包括監視器狀態、監視器類、等待線程、擁有者線程等信息
Locking History Graph 能夠錄製監視器鎖定的歷史
Monitor History 能夠顯示全部監視器的歷史
Monitor Usage Stat 以監視器、線程等方式分組,顯示監視器的使用統計,包括阻塞次數、阻塞持續時間、等待次數、等待持續時間等
虛擬機遙感視圖(VM Telemetry Views)

該視圖能夠顯示時間線上的系統宏觀信息,包括如下選項卡:

Memory 顯示已有、空閒內存的區域圖
Recorded Objects 顯示堆中對象(數組、非數組)的數量
Recorded Throughput 顯示已記錄對象的建立和銷燬數量
GC Activity 顯示GC活動率百分比
Classes 顯示加載的類的數量
Threads 顯示處於各類狀態的線程的數量
CPU Load 顯示CPU負載百分比
JavaEE以及探針(JEE & Probes)

能夠使用多種探針來檢測不一樣的應用領域,包括:JDBC、JPA/Hibernate、JNDI、JMS、Servlet、RMI、Socket、WebServices、Files等。

剖析配置
觸發器

用於在特定條件下觸發剖析動做
觸發條件:方法被調用、堆使用閾值、CPU使用率閾值、內存溢出異常、定時器、虛擬機啓動、虛擬機關閉等
剖析動做:啓/停錄製、調用跟蹤、監視器跟蹤,觸發堆dump、線程dump,啓/停探針錄製,保存快照,保存HPROF快照,運行腳本等

離線剖析

使用場景:腳本啓動剖析、按期快照保存、剖析遠程服務器

Session ID:須要指定id=xxx參數來激活相應的Profiling Settings,此ID顯示在Session Settings - Application Settings的左上角,若是配置文件中只包含一個Session,則不須要配置。
配置文件位置:能夠指定config=xxx.xml,來指明設置的存放位置,默認是~/.jprofiler7/config.xml
離線剖析命令行樣例:
 
相關文章
相關標籤/搜索