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

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

2、進(jìn)入到安裝界面,默認(rèn)安裝到C盤,選擇第二項(xiàng)可以自定義

3、點(diǎn)擊next出現(xiàn)許可協(xié)議,選擇第一項(xiàng)也就是我同意

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

5、繼續(xù)next就會開始jprofiler 11的安裝了

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

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

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

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

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

Allocation Call Tree
Allocation Call Tree 以樹形圖的形式展示了各方法分配的內(nèi)存大小??梢钥吹?,SamplePerformance$1.run()和SendProducerBatchTask.run()是內(nèi)存分配大戶。

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

Thread History
線程歷史記錄視圖直觀地展示了各線程在不同時間點(diǎn)的狀態(tài)。

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