1. 程式人生 > >JProfiler安裝、啟用

JProfiler安裝、啟用

這裡只演示Windows下的步驟、linux下的後期新增

目錄: 一、簡介 二、安裝說明 三、配置(重要)

一、簡介

JProfiler 是一個全功能的 Java 剖析工具(profiler),專用於分析 J2SE J2EE  應用程式。它把 CPU 執行緒和記憶體的剖析組合在一個強大的應用中。JProfiler 可提供許多 IDE 整合和應用伺服器整合用途。


JProfiler 直覺式的 GUI 讓你可以找到效能瓶頸、抓出記憶體洩漏(memory leaks)、並解決執行緒的問題。它讓你得以對

heap walker 作資源回收器的 root analysis,可以輕易找出記憶體洩漏;heap 快照(snapshot)模式讓未被參照(reference)的物件、稍微被參照的物件、或在終結(finalization)佇列的物件都會被移除;整合精靈以便剖析瀏覽器的  Java外掛功能,JProfiler 功能很強大,可以監控普通的  java application, applet, java web start,application server  等。除了可以監控本地的程式,還可以對遠端伺服器上跑的應用進行監

控。

最新版下載連線 http://www.ej-technologies.com/download/jprofiler/files.php

實測可以破解的版本https://download.csdn.net/download/zhao3587717/10765483

當前使用版本為  9.2

  二、 安裝說明(這裡指安裝Windows)

windows 下安裝,點選 exe 檔案進行安裝,預設安裝即可(也可自己指定安裝目錄)。linux 下服務端安裝,直接解壓即可。安裝時會自動搜尋是否安裝過 JDK ,可不必配置.


三、配置


1、 JProfiler's start center 

在安裝完畢後開啟會有一個頁面嚮導


使用 JProfiler's start center,你可以建立新的會話,編輯已有會話或者開啟已儲存的會話。

在選單中選擇 start center ,也可以開啟這個嚮導頁面、有以下四個標籤:Open sessionNew sessionConvert session和  Open snapshot

我們可以先看第一個

1.1 Open session 

start center 中,開啟  Open session標籤,在視窗中顯示所有預先定義的會話,如上圖:

你可以選擇一個會話,點選 OK來開啟預定義的會話。

會話也可以被修改、複製、刪除和排序。

也可以選單中選擇 session --> Open session,開啟 Open session視窗。

1.2 New session 

     會話能夠通過兩種途徑建立:

第一種:人工配置:使用[New session]按鈕手工配置一個新的session,配置完成後,開始執行(如何配置詳見下面)

第二種:通過整合嚮導:使用整合嚮導上的三個按鈕:[New server integration] [New remote integration] [New applet integration] 。 

會話建立完成後可以立即執行。在 Open session標籤頁中能夠看到新建的會話。


1.2.1   New  Session(人工配置建立)

點選New Session按鈕,顯示Application Settings窗體,關於Application Settings

置,請參見2管理session 


此頁面也可以在選單中選擇 Session-->New Session,開啟 New Session 窗體

1.2.2 New server integration(通過整合嚮導建立

點選 New server integration按鈕,開啟整合嚮導,引導你將  JProfiler與本地或遠端的應用伺服器進行整合,步驟:

第一步、選擇需要整合的應用伺服器

如果你所使用的應用伺服器不在列表中,則選擇Generic application sever ,並點選下一步如圖:



第二步、  選擇要整合的應用伺服器地址

選擇要整合的應用伺服器是本地的,還是遠端的。如果你選擇遠端計算機,在選擇 的計算機上必須安裝 JProfiler ,並選擇遠端計算機的作業系統,點選 下一步 如圖:

 

第三步:選擇  JVM提供商,版本和模式(也就是指定jdk的版本)

當你選擇 jdk版本時,系統會自動選擇推薦的模式


第四步、選擇 Jprofiler 啟動介面式。

在開發環境,建立選擇第一項,很容易修改監測設定;如果你選擇不等待,在啟動應用伺服器之前要先配置監測設定。VM引數依賴於  JProfiler配置檔案的位置;配置檔案要與遠端計算機上的保持同步。

1、wait for a connection from the Jprofiler GUI :  監控tomcat  JProfiler啟動

2、startup immediately,connect later with the JProfiler GUI: 立即啟動,稍後與JProfiler 頁面連線

3、profile offline ,JProfiler GUI cannot connect :在離線情況下,jprofiler gui 無法連線

 

我選擇第一個立即啟動稍後連線(有興趣的可以都嘗試一下)

第五步:選擇 Tomcat 啟動檔案路徑


第六步:指定JPfrofiler的埠(選擇監測的連線埠)

JProfiler GUI 前端通過指定的埠連線被監測的  JVM,預設埠為 8849。請不要選擇常用的埠,如 80  8080


第七步:檢查需求通知

整合嚮導完成配置,所有必須的資訊會進行通知,請檢查,點選下一步。如圖:



第八步:完成是否立即執行


這裡就新建一個session完畢。配置完畢後你會在Open session 中看到你配置的內容

選擇啟動、因為在第四步中選擇了第一種。所以會出現



選擇第二個、之後會出現

點選ok、則啟動成功了!

這裡有個問題。

在第四步中如果選擇了第二種。那麼無論是tomcat啟動沒有啟動JProfiler都啟動不了丟擲一個Connection error的錯


待排查

而在第四步選擇第三種方式時。tomcat有沒有啟動JProfiler拋上面相同的錯誤。同上面。

待排查。

1.3 Open snapshot 

可以通過開啟*.jps檔案來開啟原來儲存過的   session

管理 session(不做詳解)

2.1      Application settings dialog 

這個頁面可以是在建立session時管理,也可在open session右鍵編輯管理(如前面人工配置圖片)

 session 名稱 session型別等根據需要自定義



3、監測檢視

3.1 記憶體檢視

JProfiler 的記憶體檢視部分可以提供動態的記憶體使用狀況更新檢視和顯示關於記憶體分配狀況資訊的檢視。所有的檢視都有幾個聚集層並且能夠顯示現有存在的物件和作為垃圾回收的物件。

3.1.1所有物件(ALL    objects

所有物件檢視顯示所有載入的類的列表和在堆上分配的例項數。只有       Java  1.5 (JVMTI)才會顯示此檢視。要檢視特定時間段物件的分配,並記錄分配的呼叫堆疊,請使用記錄的物件檢視

有一個集合體等級選擇器,你可以在以下幾種型別中切換:

  • 類(classes):每一行顯示一個單獨的類,這是預設的集合體型別
  • 包(packages):每一行顯示一個單獨的包,子包不包含在內。在這個集合體等級內,表是樹形的。你可以點選樹節點,檢視其包含的類
  •  J2EE元件(   J2EE  components):每一行是一個 J2EE元件。此模式類似類模式中的過濾器,能夠讓你快速檢查應用中載入的 J2EE元件。

在表中顯示三行,可以排序

  • 名字:根據集合體等級的不同,分別顯示類、包或      J2EE 
  • 例項數:
  • 大小:顯示所以分配實際的總大小。只包括相應指標的大小,不包含引用陣列和例項的大小。以位元組顯示。只包括物件資料,不包括類使用的 JVM大小,也不包含類資料和本地變數大小。

更新頻率可以在profiling settings dialog的miscellaneous tab中設定。所有物件檢視的更新頻率是根據堆上的物件數來自動調整的,如果堆上有太多物件,所有物件檢視的計算變得昂貴,所以更新頻率會降低。你可以隨時重新整理以獲取最新資料。

你可以在class tracker增加包或類。如果類跟蹤器沒有記錄,則開始記錄class tracker 中配置的所有類;如果正在記錄不同的物件型別,所以的記錄資料被清空

你可以凍結所有的檢視讓所有的檢視物件保持靜態

你可以標記當前值並顯示差異值。

 

3.1.2  記錄的物件(Recorded objects

記錄的物件檢視顯示所有已記錄物件和陣列的列表,包括堆上分配的例項數。只有已記錄的物件在此檢視中顯示。配置記錄的細節請參見  memory section overview 

如果選擇了某個包或類,你可以從記錄物件檢視跳轉到分配呼叫樹和分配熱點。方法是右鍵點選,選擇要跳轉的檢視。

你可以在class tracker增加包或類。如果類跟蹤器沒有記錄,則開始記錄class tracker 中配置的所有類;如果正在記錄不同的物件型別,所以的記錄資料被清空

記錄的物件檢視可以根據物件的活動狀態進行過濾:

  • 活動物件(Live objects只顯示當前在記憶體中的物件
  • 垃圾回收物件(Garbage collected objects被顯示被回收的物件
  • 活動的和垃圾回收物件(Live and garbage collected objects顯示所有被建立的物件

右鍵選擇 Change view mode 或者使用  View->Change view mode切換三種模式

你可以標記當前值並顯示差異值。

3.1.3  分配呼叫樹(Allocation call tree  

分配呼叫樹檢視 顯示一棵請求樹或者方法、類、包或對已選擇類有帶註釋的分配資訊的J2EE元件

3.1.4  分配熱點檢視(Allocation hot spots    view

分配熱點檢視顯示所選類的物件被分配在哪兒的方法列表。分配到至少佔總數  1%的方法才會被顯示。方法可以根據active filter sets設定進行過濾。此檢視和CPU section 裡的hot spots view檢視有些類似,只是顯示的是分配的類的例項數和陣列而不是時間度

對於每個熱點都可以顯示它的跟蹤記錄樹。

3.1.5類跟蹤(Class     tracker

3.2 堆遍歷(Heap Walker) 

3.2.1類(Classes)

顯示所有類和它們的例項

3.2.2分配(Allocations)

為所有記錄物件顯示分配樹和分配熱點

3.2.3索引(References)

為單個物件和顯示到垃圾回收根目錄的路徑提供索引圖的顯示功能。還能提供合併輸入檢視和輸出檢視的功能

3.2.4資料(Data)

為單個物件顯示例項和類資料

3.2.5時間(Time)

顯示一個對已記錄物件的解決時間的柱狀圖

3.3 CPU檢視

3.3.1呼叫樹檢視(Call     tree view

呼叫樹顯示一個執行緒從上向下呼叫樹。可以根據過濾設定向上或向下過濾顯示。

JProfiler自動檢測   J2EE元件並在呼叫樹中顯示相關的節點。使用不同的圖示顯示不同的 J2EE元件型別

  •  servlets:黃色倒心形
  • JSPs:藍色倒心形
  •  EJBs:紅色倒心形 

對於 JSPs  EJBs, JProfiler顯示名為:

  • JSPsJSP 原始檔路徑
  •  EJBsEJB介面名稱

如果  URL可以被細分,每個   URL請求使用一個特殊的符號建立一個新的結點以URL:做字首,後面跟上細分後的 URL請求

呼叫樹檢視集合體等級選擇有四種:

  • 方法,也是預設等級。每個節點都是一個方法呼叫。特殊的      J2EE元件方法有他們自己的圖示和顯示名,上面講到過。真實的類名以方括號括起
  • 類:每個節點是一個單獨的類。特殊的      J2EE元件方法有他們自己的圖示和顯示名,上面講到過。真實的類名以方括號括起
  • 包:每個節點是一個單獨的包。不包括子包
  • J2EE元件:每個節點是一個  J2EE元件,如果元件有獨立的顯示名,真實類名省略。

呼叫樹不顯示 JVM中的所有方法,只顯示:

  • 未過濾的類:根據你配置的過濾器設定沒有過濾的類
  • 未過濾的類的第一級呼叫:未過濾的類對過濾的類的第一級呼叫,對過濾類的深一級的呼叫不顯示。過濾的節點在左上角以紅色標記。
  • 執行緒實體方法:方法       Runnable.run()和主方法總是被顯示的,無論是否過濾一個特殊的結點是橋結點,本來在檢視中不顯示,但其子孫節點在檢視中顯示。如果在  view settings中設定了percentage bar模式,呼叫樹中的每個節點都會顯示一個百分比條,顯示當前節點的內部時間佔總時間的百分比,當前節點包括其所有子孫節點和紅色高亮的部分view settings可以設定以下內容:

 

這需要一個圖片後期補

1)節點描述

  • 百分比數:考慮樹的根或呼叫節點
  • 總時間度量:ms  µs 。包括呼叫其它節點的總時間。
  • 內部時間度量:ms  µs。內部時間,不包括呼叫非過濾類
  • invocation count:顯示在此路徑中節點被呼叫的頻繁程度。
  • 是否顯示方法呼叫全名
  • 是否顯示方法呼叫簽名(顯示引數)
  • 是否在括號內顯示平均時間

2)時間範圍

  • 自動
  • ms 
  • us 

3)顯示極限

  • 隱藏小於一定百分比的呼叫

4)百分比計算

  • 絕對
  • 相對

名稱顯示依賴集合體等級:方法、類、包和 J2EE元件

行數在以下情況下會顯示:行數顯示的是呼叫(invocation)的行數,還不是方法本身的行數

  • 集合體等級為方法
  • profiling settings設定中選擇了顯示行數
  • 呼叫類為未過濾類

你可以選擇任何一個節點,然後選擇 View->Set as root ,將選擇的節點改為根節點。如果在 view settings 裡,百分比基數設定為“total thread time”,百分比會按照新的根節點重新計算。選擇 View->Show all返回所有檢視

你可以停止或重啟  CPU資料獲取來清空呼叫數,也可以凍結所有檢視讓呼叫數保持靜態

3.3.2熱點檢視(Hot     spot view

熱點檢視顯示選擇型別的呼叫列表。截去了佔總時間小於 0.1%的點。

熱點型別"hot spot type"下拉中可選擇,包括兩種:

1》方法呼叫(method calls

  • method calls (show filtered classes separately)

從方法呼叫中計算顯示的熱點,被過濾的類計算自己的熱點,預設為此模式。

  • method calls (add filtered classes to calling class)

從方法呼叫中計算顯示的熱點,被呼叫的類被加到呼叫類上,除非是執行緒實體方法(run  main 方法)

  • 根據你選擇的集合體等級不同,方法熱點也會變換。

2》 J2EE 相關的呼叫

  • JDBC calls

顯示的熱點為JDBC 呼叫。需要在profiling settings中設定為可用。

  • JMS calls

顯示的熱點為JMS 呼叫。需要在profiling settings中設定為可用。

  • JNDI calls

顯示的熱點為JNDI 呼叫。需要在profiling settings中設定為可用。

  • URL invocations

顯示的熱點  URL呼叫。需要在profiling settings中設定為可用。在profiling settings中,你需要指定是所有的URL都被顯示,還是呼叫一個未過濾類的URL才會被顯示,預設為後者。

3.3.3呼叫圖(Call     graph

呼叫圖靜態地顯示所選擇節點計算出執行緒呼叫圖。節點可以為方法、類、包或  J2EE元件。

計算呼叫圖,點選工具欄中的 Generate graph或者選擇  View->Generate graph

在圖形計算之前,會啟動呼叫圖嚮導。結果圖形是靜態的,並能夠重新計算。呼叫圖嚮導會記錄你最近一次的選項。

呼叫圖嚮導如下:

第一步:選擇圖選項(後期補圖)

呼叫圖能夠為所有執行緒、一個執行緒組和單個執行緒的所有整合等級生成呼叫圖。執行緒狀態選擇可以控制在呼叫圖中顯示的時間含義。如線上程狀態中,選擇了 Runnable,在呼叫圖中,Total Time表示的就是執行緒處於  Runnable的時間。

第二步:選擇第一個節點:選擇生成呼叫樹的首節點,點選完成,生成呼叫樹。(後期補圖)


3.4 執行緒檢視

3.4.1執行緒歷史檢視

按照執行緒開始的順序顯示 JVM中所有執行緒狀態的詳細歷史資訊在檢視左手點,執行緒的名字固定顯示,其它部分是滾動度量工具,在水平軸上顯示時間。時間軸的開始時間與 JVM的第一個執行緒的時間保持一致。每個活動的執行緒用帶顏色的線標明,從執行緒開始到執行緒結束。顏色標識執行緒的狀態:

  • 綠色

綠色表明執行緒正在執行並能接收 CPU時間。不表明執行緒正在消耗  CPU時間,只表明執行緒準備執行並且沒有阻塞或睡眠。執行緒被分配了多少  CPU時間,依賴於不同的其它因素,如總的系統負載,執行緒優先順序和排程的運演算法則

  • 橙色

橙色表示執行緒在等待。執行緒正在睡眠並等待計時器或其它執行緒喚醒

  • 紅色

紅色表示執行緒阻塞。執行緒嘗試進入同步程式碼區或由其它執行緒控制的同步方法

  • 藍色

亮藍色表示執行緒在 Net  I/O操作,執行緒在等待  JAVA庫的網路操作完成。線上程監 socket連線或者等待讀寫資料到  socket中時,會產生這種狀態。

在檢視的頂部,有一個執行緒過濾器,你可以按以下方法進行過濾:

1》活動狀態      liveness status

活動的和死執行緒  Both alive and dead threads

  • 只顯示活動的執行緒
  • 只顯示死執行緒

2》名稱

在文字框中,你可以輸入執行緒的全名或部分名稱進行過濾。也可以使用萬用字元("*"   and  "?")選擇執行緒組。可以用逗號隔開多個過濾項進行過濾,如 AWT-, MyThreadGroup-*-Daemon. 


執行緒歷史檢視有兩種顯示模式:

  • 固定時間範圍      fixed time scale

此種模式下,時間軸的刻度一直保持不變,如果顯示超出螢幕範圍,可以使用滾動條檢視,如果檢視是在自動跟蹤模式下,剛總是顯示當時時間下的圖形。也可以使用  zooming in  zooming out來調整顯示的範圍。

  • 固定視窗範圍      scale to fit window

此種模式下,在當前檢視中會顯示整個時間段的圖形。Zooming在此模式下不能使

3.4.2執行緒監控檢視

顯示當前執行的執行緒列表以及相關的時間和狀態資訊。

顯示的六列:

  • 名稱      Name

顯示執行緒名稱,如果執行緒沒有被特別命名,則使用 JVM提供的名稱。想讓此檢視更加有用,最好將你自己建立的執行緒使用 setName() 進行命名。

  •      Group

顯示與此執行緒相關的執行緒組的名稱

  • Start time

顯示執行緒開始的時間,時間是根據 JVM中第一個執行緒建立的時間還計算的。

  • End time

只有在 view settings設定了顯示死執行緒時才能看到這一列,顯示執行緒死去的時間,或者執行緒還活著但成為空執行緒的時間,時間是根據 JVM中第一個執行緒建立的時間還計算的。

  • CPU time

顯示執行緒消耗的 CPU時間

Note:  CPU時間一列,只有在profiling  settings中的Miscellaneous欄中設定CPU  time

type Estimated   CPU  times ,並且當你記錄CPU資料時,CPU時間才會被度量,否則CPU時間一欄總是空的。

如果你的系統和 JVM不支援執行緒特定的  CPU時間報告,這欄也是空的

  • Creating thread

顯示執行緒的名字和建立此執行緒的執行緒組。

  • Status

顯示執行緒的狀態,相當於執行緒歷史檢視中的狀態報告

如果你監控的是 JAVA1.5或以上版本(JVMTI),在螢幕的上半部分就顯示上面的表,螢幕的下半部分顯示所選執行緒的執行緒建立堆疊跟蹤。堆疊跟蹤只有執行緒建立時記錄CPU資料才會顯示。

3.4.3死鎖檢測圖形

JVM中所有死鎖的圖形化顯示.

正常的狀態如果沒有死鎖,就顯示"No deadlocks detected"

死鎖根據以下情況進行分析:

  •     JAVA平臺上建立的最初的同步機制,如:使用同步的關鍵詞
  •     java.util.concurrent包中的鎖機制,不使用物件的監控而是不同的實現機制

死鎖檢測圖形有以下特徵:

1》在死鎖中的執行緒以紫色的矩形表示。矩形包括以下資訊:

  • 執行緒名
  • 執行緒組(括號括起來)

2》在死鎖中的監視器以灰色的矩形表示,包括以下資訊:

  • 監控的類
  • 可以用來繼續跟蹤的監控  ID

3》監控器的所有權用實線箭頭表示。箭頭指向從執行緒到監控器。想要了解詳細信息,把滑鼠停留到箭頭上,可以看到提示視窗

4》導致執行緒死鎖的阻塞原因使用虛線箭頭來表示。前頭指向從阻塞執行緒到執行緒想進行的監控器

3.4.4當前監控使用檢視

顯示當前等待和阻塞的操作

顯示以下 6列:可排序

  • 時間      Time

事件起始時間

  • Duration

事件持續時間,事件必須還在進行中

  •  Type

事件型別,  "waiting" 或"blocked"中的一種

  • Monitor ID

在特定的監控例項上識別多個事件的  ID

  • Monitor class

監控器的類。如果沒有 JAVA物件與此監控器相關聯,剛顯示   [raw monitor] 

  • Waiting thread

事件中正在或過去在等待的執行緒

3.4.5監控使用歷史檢視

顯示監控中等待和阻塞的操作

3.4.6監控使用統計

顯示監控使用的統計資訊

點選工具欄上的 Calculate statistics,或者選擇 View->Calculate statistics

在統計開始前,會開啟一個monitor usage statistics options對話方塊,統計結果表是靜態的,並能重新計算

包級別的統計表包含下面 5列:

1》Monitors/Threads/Classes

在統計物件框中按分組標準顯示名稱

2》Block count

在此監控組中,阻塞操作的頻繁程度

3》Block duration

在此監控組中,所有阻塞操作的累積的待續阻塞時間

4》Wait count

在此監控組中,等待操作的頻繁程度

5》Wait duration

在此監控組中,所有等待操作的累積的待續等待時間

3.5 VM遙感監測檢視

3.5.1(Heap)

顯示最大的堆大小以及堆中已使用的和未使用的空間大小。可以顯示線性圖和區域

3.5.2物件(Objects)

顯示堆上物件的總數,分為陣列和非陣列。可以顯示線性圖和區域圖

3.5.3垃圾回收(Garbage     collector)

顯示垃圾回收活動,包括物件釋放的一條線和物件移動的一條線。只顯示已記錄的物件,如果沒有記錄物件,此檢視不可用

3.5.4(Classes)

顯示 JVM呼叫的類的總,分為過濾類和非過濾類

3.5.5執行緒(Threads)

顯示 JVM中活著的執行緒總數,分為活動的執行緒和不活動的執行緒。

此篇文章寫在這裡,下一篇檔案寫如何將JProfiler整合在eclips中

 


 


 






本文轉載自:https://blog.csdn.net/sinat_38259539/article/details/71023582