JProfiler是一款功能強大易用的JAVA性能分析工具,這里為大家提供官方下載最新版本分流下載,使用JProfiler可以快速的分析出您的操作錯誤這存在的錯誤,以此讓開發者進行了解自己的不足之處,提高Java的開發成功率;軟件還可對需要的顯示類進行標記,包括了內存的分配情況和信息的視圖等,JProfiler使用起來很簡單,是大家剖析Java必備的工具,下面還提供了安裝教程,大家可以下載并學習。

JProfiler軟件特色
使用方便
界面操作友好
對被分析的應用影響小
CPU、Thread、Memory分析功能尤其強大
支持對jdbc、noSql、jsp、servlet、socket等進行分析
支持多種模式(離線,在線)的分析
JProfiler功能介紹
軟件功能
1.內存剖析 Memory profiler
JProfiler 的內存視圖部分可以提供動態的內存使用狀況更新視圖和顯示關于內存分配狀況信息的視圖。所有的視圖都有幾個聚集層并且能夠顯示現有存在的對象和作為垃圾回收的對象。
所有對象
顯示類或在狀況統計和尺碼信息堆上所有對象的包。你可以標記當前值并顯示差異值。
記錄對象 Record objects
顯示類或所有已記錄對象的包。你可以標記出當前值并且顯示差異值。
分配訪問樹 Allocation call tree
顯示一棵請求樹或者方法、類、包或對已選擇類有帶注釋的分配信息的J2EE組件。
分配熱點 Allocation hot spots
顯示一個列表,包括方法、類、包或分配已選類的J2EE組件。你可以標注當前值并且顯示差異值。對于每個熱點都可以顯示它的跟蹤記錄樹。
2.堆遍歷 Heap walker
在JProfiler的堆遍歷器(Heap walker)中,你可以對堆的狀況進行快照并且可以通過選擇步驟下尋找感興趣的對象。堆遍歷器有五個視圖:
為單個對象和“顯示到垃圾回收根目錄的路徑”提供索引圖的顯示功能。還能提供合并輸入視圖和輸出視圖的功能。
顯示一個對已記錄對象的解決時間的柱狀圖。
3. CPU 剖析 CPU profiler
JProfiler 提供不同的方法來記錄訪問樹以優化性能和細節。線程或者線程組以及線程狀況可以被所有的視圖選擇。所有的視圖都可以聚集到方法、類、包或J2EE組件等不同層上。CPU視圖部分包括:
顯示一個積累的自頂向下的樹,樹中包含所有在JVM中已記錄的訪問隊列。JDBC,JMS和JNDI服務請求都被注釋在請求樹中。請求樹可以根據Servlet和JSP對URL的不同需要進行拆分。
顯示消耗時間最多的方法的列表。對每個熱點都能夠顯示回溯樹。該熱點可以按照方法請求,JDBC,JMS和JNDI服務請求以及按照URL請求來進行計算。
主要功能
本地會話實時分析模式
用戶一旦定義好了其應用程序啟動方式,JProfiler即能對之進行設置,用戶即刻便能從設置好的JVM中看到實時數據。用戶若不想進行會話配置,其可以從多個IDE插件中選擇其最喜歡的那個對應用程序進行配置。
遠程會話實時分析模式
通過修改Java開始命令行方式的VM參數,用戶可使任意Java應用程序監聽來自的JProfiler GUI的連接。該設置程序不但可以在本地計算機上運行,還可以在網絡中作為某個設置程序的附加程序使用。此外,JProfiler還提供了相當多的集成向導,可用于主流的可以幫助用戶安裝和設置其應用程序的應用程序服務器。
離線分析模式
用戶無需通過JProfiler GUI連接應用程序即可對之進行設置。在離線設置模式下,用戶可以使用功能強大的JProfiler觸發系統或者JProfiler' API對設置代理進行控制,然后將快照保存入磁盤。稍后用戶便可使用命令行導出工具或者螞蟻任務導出工具,在JProfiler GUI或編程方式的設置導出視圖中打開這些快照。
快照比較
在JProfiler中,用戶可以將當前的所有設置數據保存為一個快照存入磁盤中。JProfiler提供了豐富的比較功能以對比兩個或者多個快照之間的不同。用戶可從編程的命令行比較工具和ant task比較工具中選擇其一創建對比報告。
查看HPROF快照
JProfiler能打開用JVM工具(比如jconsole、 jmap或通過-XX:+HeapDumpOnOutOfMemoryError JVM參數觸發)創建的HPROF快照文件
JProfiler安裝步驟
1、雙擊“jprofiler_windows-x64_11_0.exe”開始加載安裝包

2、進入到安裝界面,默認安裝到C盤,選擇第二項可以自定義

3、點擊next出現許可協議,選擇第一項也就是我同意

4、選擇軟件安裝目錄,默認為“C:\Program Files\jprofiler11”

5、繼續next就會開始jprofiler 11的安裝了

6、稍等一會兒完成jprofiler 11的安裝
JProfiler使用教程
JProfiler 設置
數據采集模式
JProfier 提供兩種數據采集模式 Sampling 和 Instrumentation。
Sampling - 適合于不要求數據完全精確的場景。優點是對系統性能的影響較小,缺點是某些特性不支持(如方法級別的統計信息)。
Instrumentation - 完整功能模式,統計信息也是精確的。缺點是如果需要分析的類比較多,對應用性能影響較大。為了降低影響,往往需要和 Filter 一起使用。
由于我們需要獲取方法級別的統計信息,這里選擇了 Instrumentation 模式。同時配置了 Filter,讓 agent 只記錄位于 Java 包com.aliyun.openservices.aliyun.log.producer下的類和類com.aliyun.openservices.log.Client的 CPU 分析數據。
應用啟動模式
通過為 JProfiler agent 指定不同的參數可以控制應用的啟動模式。
等待模式 - 只有在 Jprofiler GUI 和 agent 建立連接并完成分析配置設置后,應用才會真正啟動。在這種模式下,您能夠獲取應用啟動時期的分析數據。對應的命令為-agentpath:=port=8849。
立即啟動模式 - 應用會立即啟動,Jprofiler GUI 會在需要時和 agent 建立連接并設置分析配置。這種模式相對靈活,但會丟失應用啟動初期的分析數據。對應的命令為-agentpath:=port=8849,nowait。
離線模式 - 通過觸發器記錄數據、保存快照供事后分析。對應的命令為-agentpath:=offline,id=xxx,config=/config.xml。
因為是在測試環境,同時對應用啟動初期的性能也比較關注,這里選擇了默認的等待模式。
使用 JProfiler 診斷性能
在完成 JProfiler 的設置后,便可以對 Producer 的性能進行診斷。
Overview
在概覽頁我們可以清晰的看到內存使用量、垃圾收集活動、類加載數量、線程個數和狀態、CPU 使用率等指標隨時間變化的趨勢。

通過此圖,我們可以作出如下基本判斷:
程序在運行過程中會產生大量對象,但這些對象生命周期極短,大部分都能被垃圾收集器及時回收,不會造成內存無限增長。
加載類的數量在程序初始時增長較快,隨后保持平穩,符合預期。
在程序運行過程中,有大量線程處于阻塞狀態,需要重點關注。
在程序剛啟動時,CPU 使用率較高,需要進一步探究其原因。
CPU views
CPU views 下的各個子視圖展示了應用中各方法的執行次數、執行時間、調用關系等信息,能幫我們定位對應用性能影響最大的方法。
Call Tree
Call tree 通過樹形圖清晰地展現了方法間的層次調用關系。同時,JProfiler 將子方法按照它們的執行總時間由大到小排序,這能讓您快速定位關鍵方法。

對于 Producer 而言,方法SendProducerBatchTask.run()耗時最多,繼續向下查看會發現該方法的主要時間消耗在了執行方法Client.PutLogs()上。
Hot Spots
如果您的應用方法很多,且很多子方法的執行時間比較接近,使用 hot spots 視圖往往能助您更快地定位問題。該視圖能根據方法的單獨執行時間、總執行時間、平均執行時間、調用次數等屬性對它們排序。其中,單獨執行時間等于該方法的總執行時間減去所有子方法的總執行時間。

在該視圖下,可以看到Client.PutLogs(),LogGroup.toByteArray(),SamplePerformance$1.run()是單獨執行時間耗時最多的三個方法。
Call Graph
找到了關鍵方法后,call graph 視圖能為您呈現與該方法直接關聯的所有方法。這有助于我們對癥下藥,制定合適的性能優化策略。

這里,我們觀察到方法Client.PutLogs()執行的主要時間花費在了對象序列化上,因此性能優化的關鍵是提供執行效率更高的序列化方法。
Live memory
Live memory 下的各個子視圖能讓您掌握內存的具體分配和使用情況,助您判斷是否存在內存泄漏問題。
All Objects
All Objects 視圖展示了當前堆中各種對象的數量和總大小。由圖可知,程序在運行過程中構造出了大量 LogContent 對象。

Allocation Call Tree
Allocation Call Tree 以樹形圖的形式展示了各方法分配的內存大小。可以看到,SamplePerformance$1.run()和SendProducerBatchTask.run()是內存分配大戶。

Allocation Hot Spots
如果方法比較多,您還可以通過 Allocation Hot Spots 視圖快速找出分配對象最多的方法。

Thread History
線程歷史記錄視圖直觀地展示了各線程在不同時間點的狀態。

不同線程執行的任務不同,所展現的狀態特征也不同。
線程pool-1-thread-會循環調用producer.send()方法異步發送數據,它們在程序剛啟動時一直處于運行狀態,但隨后在大部分時間里處于阻塞狀態。這是因為 producer 發送數據的速率低于數據的產生速率,且單個 producer 實例能緩存的數據大小有限。在程序運行初始,producer 有足夠空間緩存待發送數據,所以pool-1-thread-一直處于運行狀態,這也就解釋了為何程序在剛啟動時 CPU 使用率較高。隨著時間的推移,producer 的緩存被逐漸耗盡,pool-1-thread-必須等到 producer “釋放”出足夠的空間才有機會繼續運行,這也是為什么我們會觀察到大量線程處于阻塞狀態。
aliyun-log-producer-0-mover負責將超時 batch 投遞到發送線程池中。由于發送速率較快,batch 會因緩存的數據達到了上限被pool-1-thread-直接投遞到發送線程池中,因此 mover 線程在大部分時間里都處于等待狀態。
aliyun-log-producer-0-io-thread-作為真正執行數據發送任務的線程有一部分時間花在了網絡 I/O 狀態。
aliyun-log-producer-0-success-batch-handler用于處理發送成功的 batch。由于回調函數比較簡單,執行時間短,它在大部分時間里都處于等待狀態。
aliyun-log-producer-0-failure-batch-handler用于處理發送失敗的 batch。由于沒有數據發送失敗,它一直處于等待狀態。
通過上述分析可知,這些線程的狀態特征都是符合預期的。
Overhead Hot Spots Detected
當程序運行結束后,JProfiler 會彈出一個對話框展示那些頻繁被調用,但執行時間又很短的方法。在下次診斷時,您可以讓 JProfiler agent 在分析過程中忽略掉這些方法以減輕對應用性能的影響。
