軟件介紹JProfiler是一款專門為Java推出的性能分析軟件,它的主要功能是幫助用戶監(jiān)視JVM的運(yùn)行情況和性能,通過對(duì)系統(tǒng)內(nèi)存使用情況的監(jiān)控,幫助用戶分析程序中存在的各種問題。JProfiler使用起來很簡單,是大家剖析Java必備的工具,有需要的用戶敬請(qǐng)下載。 JProfiler軟件特色使用方便 界面操作友好 對(duì)被分析的應(yīng)用影響小 CPU、Thread、Memory分析功能尤其強(qiáng)大 支持對(duì)jdbc、noSql、jsp、servlet、socket等進(jìn)行分析 支持多種模式(離線,在線)的分析 JProfiler功能介紹JProfiler是一個(gè)全功能的Java剖析工具(profiler),專用于分析J2SE和J2EE應(yīng)用程序。它把CPU、執(zhí)行緒和內(nèi)存的剖析組合在一個(gè)強(qiáng)大的應(yīng)用中。JProfiler可提供許多IDE整合和應(yīng)用服務(wù)器整合用途。JProfiler直覺式的GUI讓你可以找到效能瓶頸、抓出內(nèi)存漏失(memoryleaks)、并解決執(zhí)行緒的問題。它讓你得以對(duì)heapwalker作資源回收器的Rootanalysis,可以輕易找出內(nèi)存漏失;heap快照(snapshot)模式讓未被參照(reference)的對(duì)象、稍微被參照的對(duì)象、或在終結(jié)(finalization)隊(duì)列的對(duì)象都會(huì)被移除;整合精靈以便剖析瀏覽器的Java外掛功能。 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就會(huì)開始jprofiler 11的安裝了 6、稍等一會(huì)兒完成jprofiler 11的安裝 JProfiler使用教程JProfiler 設(shè)置 數(shù)據(jù)采集模式 JProfier 提供兩種數(shù)據(jù)采集模式 Sampling 和 Instrumentation。 Sampling - 適合于不要求數(shù)據(jù)完全精確的場景。優(yōu)點(diǎn)是對(duì)系統(tǒng)性能的影響較小,缺點(diǎn)是某些特性不支持(如方法級(jí)別的統(tǒng)計(jì)信息)。 Instrumentation - 完整功能模式,統(tǒng)計(jì)信息也是精確的。缺點(diǎn)是如果需要分析的類比較多,對(duì)應(yīng)用性能影響較大。為了降低影響,往往需要和 Filter 一起使用。 由于我們需要獲取方法級(jí)別的統(tǒng)計(jì)信息,這里選擇了 Instrumentation 模式。同時(shí)配置了 Filter,讓 agent 只記錄位于 Java 包c(diǎn)om.aliyun.openservices.aliyun.log.producer下的類和類com.aliyun.openservices.log.Client的 CPU 分析數(shù)據(jù)。 應(yīng)用啟動(dòng)模式 通過為 JProfiler agent 指定不同的參數(shù)可以控制應(yīng)用的啟動(dòng)模式。 等待模式 - 只有在 Jprofiler GUI 和 agent 建立連接并完成分析配置設(shè)置后,應(yīng)用才會(huì)真正啟動(dòng)。在這種模式下,您能夠獲取應(yīng)用啟動(dòng)時(shí)期的分析數(shù)據(jù)。對(duì)應(yīng)的命令為-agentpath:=port=8849。 立即啟動(dòng)模式 - 應(yīng)用會(huì)立即啟動(dòng),Jprofiler GUI 會(huì)在需要時(shí)和 agent 建立連接并設(shè)置分析配置。這種模式相對(duì)靈活,但會(huì)丟失應(yīng)用啟動(dòng)初期的分析數(shù)據(jù)。對(duì)應(yīng)的命令為-agentpath:=port=8849,nowait。 離線模式 - 通過觸發(fā)器記錄數(shù)據(jù)、保存快照供事后分析。對(duì)應(yīng)的命令為-agentpath:=offline,id=xxx,config=/config.xml。 因?yàn)槭窃跍y(cè)試環(huán)境,同時(shí)對(duì)應(yīng)用啟動(dòng)初期的性能也比較關(guān)注,這里選擇了默認(rèn)的等待模式。 使用 JProfiler 診斷性能 在完成 JProfiler 的設(shè)置后,便可以對(duì) Producer 的性能進(jìn)行診斷。 Overview 在概覽頁我們可以清晰的看到內(nèi)存使用量、垃圾收集活動(dòng)、類加載數(shù)量、線程個(gè)數(shù)和狀態(tài)、CPU 使用率等指標(biāo)隨時(shí)間變化的趨勢(shì)。 通過此圖,我們可以作出如下基本判斷: 程序在運(yùn)行過程中會(huì)產(chǎn)生大量對(duì)象,但這些對(duì)象生命周期極短,大部分都能被垃圾收集器及時(shí)回收,不會(huì)造成內(nèi)存無限增長。 加載類的數(shù)量在程序初始時(shí)增長較快,隨后保持平穩(wěn),符合預(yù)期。 在程序運(yùn)行過程中,有大量線程處于阻塞狀態(tài),需要重點(diǎn)關(guān)注。 在程序剛啟動(dòng)時(shí),CPU 使用率較高,需要進(jìn)一步探究其原因。 CPU views CPU views 下的各個(gè)子視圖展示了應(yīng)用中各方法的執(zhí)行次數(shù)、執(zhí)行時(shí)間、調(diào)用關(guān)系等信息,能幫我們定位對(duì)應(yīng)用性能影響最大的方法。 Call Tree Call tree 通過樹形圖清晰地展現(xiàn)了方法間的層次調(diào)用關(guān)系。同時(shí),JProfiler 將子方法按照它們的執(zhí)行總時(shí)間由大到小排序,這能讓您快速定位關(guān)鍵方法。 對(duì)于 Producer 而言,方法SendProducerBatchTask.run()耗時(shí)最多,繼續(xù)向下查看會(huì)發(fā)現(xiàn)該方法的主要時(shí)間消耗在了執(zhí)行方法Client.PutLogs()上。 Hot Spots 如果您的應(yīng)用方法很多,且很多子方法的執(zhí)行時(shí)間比較接近,使用 hot spots 視圖往往能助您更快地定位問題。該視圖能根據(jù)方法的單獨(dú)執(zhí)行時(shí)間、總執(zhí)行時(shí)間、平均執(zhí)行時(shí)間、調(diào)用次數(shù)等屬性對(duì)它們排序。其中,單獨(dú)執(zhí)行時(shí)間等于該方法的總執(zhí)行時(shí)間減去所有子方法的總執(zhí)行時(shí)間。 在該視圖下,可以看到Client.PutLogs(),LogGroup.toByteArray(),SamplePerformance$1.run()是單獨(dú)執(zhí)行時(shí)間耗時(shí)最多的三個(gè)方法。 Call Graph 找到了關(guān)鍵方法后,call graph 視圖能為您呈現(xiàn)與該方法直接關(guān)聯(lián)的所有方法。這有助于我們對(duì)癥下藥,制定合適的性能優(yōu)化策略。 這里,我們觀察到方法Client.PutLogs()執(zhí)行的主要時(shí)間花費(fèi)在了對(duì)象序列化上,因此性能優(yōu)化的關(guān)鍵是提供執(zhí)行效率更高的序列化方法。 Live memory Live memory 下的各個(gè)子視圖能讓您掌握內(nèi)存的具體分配和使用情況,助您判斷是否存在內(nèi)存泄漏問題。 All Objects All Objects 視圖展示了當(dāng)前堆中各種對(duì)象的數(shù)量和總大小。由圖可知,程序在運(yùn)行過程中構(gòu)造出了大量 LogContent 對(duì)象。 Allocation Call Tree Allocation Call Tree 以樹形圖的形式展示了各方法分配的內(nèi)存大小。可以看到,SamplePerformance$1.run()和SendProducerBatchTask.run()是內(nèi)存分配大戶。 Allocation Hot Spots 如果方法比較多,您還可以通過 Allocation Hot Spots 視圖快速找出分配對(duì)象最多的方法。 Thread History 線程歷史記錄視圖直觀地展示了各線程在不同時(shí)間點(diǎn)的狀態(tài)。 不同線程執(zhí)行的任務(wù)不同,所展現(xiàn)的狀態(tài)特征也不同。 線程pool-1-thread-會(huì)循環(huán)調(diào)用producer.send()方法異步發(fā)送數(shù)據(jù),它們?cè)诔绦騽倖?dòng)時(shí)一直處于運(yùn)行狀態(tài),但隨后在大部分時(shí)間里處于阻塞狀態(tài)。這是因?yàn)?producer 發(fā)送數(shù)據(jù)的速率低于數(shù)據(jù)的產(chǎn)生速率,且單個(gè) producer 實(shí)例能緩存的數(shù)據(jù)大小有限。在程序運(yùn)行初始,producer 有足夠空間緩存待發(fā)送數(shù)據(jù),所以pool-1-thread-一直處于運(yùn)行狀態(tài),這也就解釋了為何程序在剛啟動(dòng)時(shí) CPU 使用率較高。隨著時(shí)間的推移,producer 的緩存被逐漸耗盡,pool-1-thread-必須等到 producer “釋放”出足夠的空間才有機(jī)會(huì)繼續(xù)運(yùn)行,這也是為什么我們會(huì)觀察到大量線程處于阻塞狀態(tài)。 aliyun-log-producer-0-mover負(fù)責(zé)將超時(shí) batch 投遞到發(fā)送線程池中。由于發(fā)送速率較快,batch 會(huì)因緩存的數(shù)據(jù)達(dá)到了上限被pool-1-thread-直接投遞到發(fā)送線程池中,因此 mover 線程在大部分時(shí)間里都處于等待狀態(tài)。 aliyun-log-producer-0-io-thread-作為真正執(zhí)行數(shù)據(jù)發(fā)送任務(wù)的線程有一部分時(shí)間花在了網(wǎng)絡(luò) I/O 狀態(tài)。 aliyun-log-producer-0-success-batch-handler用于處理發(fā)送成功的 batch。由于回調(diào)函數(shù)比較簡單,執(zhí)行時(shí)間短,它在大部分時(shí)間里都處于等待狀態(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 會(huì)彈出一個(gè)對(duì)話框展示那些頻繁被調(diào)用,但執(zhí)行時(shí)間又很短的方法。在下次診斷時(shí),您可以讓 JProfiler agent 在分析過程中忽略掉這些方法以減輕對(duì)應(yīng)用性能的影響。 |
1深度技術(shù)win10正式版ghost(32位)旗艦......
2番茄花園win10 X86 ghost 標(biāo)準(zhǔn)通......
3番茄花園Win10_Ghost Win10 64......
4雨林木風(fēng) GHOST WIN10 X64 快速裝......
5深度技術(shù)GHOST WIN10 X64 尊貴專業(yè)......
6筆記本W(wǎng)in10系統(tǒng) 64位中秋特別 官方正式版......
7筆記本win10正式版ghost(32位)中秋特......
8雨林木風(fēng)win10(32位)ghost 中秋特別......