新聞中心
開(kāi)發(fā) Java 的朋友一定都遇到過(guò)應(yīng)用不同種類的問(wèn)題,有些時(shí)候是應(yīng)用 Bug 分析,有些時(shí)候是應(yīng)用性能調(diào)優(yōu),應(yīng)用的 Profiling,GC 分析等。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),海林企業(yè)網(wǎng)站建設(shè),海林品牌網(wǎng)站建設(shè),網(wǎng)站定制,海林網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,海林網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
這個(gè)時(shí)候,有不少的工具可供選擇,有商業(yè)的,有開(kāi)源的可供不同的場(chǎng)景下使用。我們本次的多功能 Profile 工具,依然是 JDK 自帶的一款,可用于多種場(chǎng)景下的應(yīng)用監(jiān)控于分析。
這款工具就是JVisual VM,全稱是 Java VisualVM。是一款可視化的 Java VM 應(yīng)用分析工具。
啟動(dòng)后是這個(gè)樣子:
分本地和遠(yuǎn)程兩種,羅列了當(dāng)前的 JVM 進(jìn)程。 遠(yuǎn)程的進(jìn)程是通過(guò) JMX 進(jìn)行連接,有一些本地的 Profile 功能不支持。
我們以本地進(jìn)程為例,來(lái)介紹下JVisual VM 常見(jiàn)功能。
雙擊要分析的 JVM 進(jìn)程,在打開(kāi)的 Tab 中選擇功能,默認(rèn)會(huì)顯示概述、監(jiān)視、線程、抽樣器和 Profiler 這幾項(xiàng)。
由于Visual VM 實(shí)現(xiàn)和 NetBeans 一致,所以可以通過(guò)插件的方式,增加許多功能。
在【工具】菜單,選擇【插件】,打開(kāi)下圖,然后選擇要安裝的插件,也可以將插件下載到本地再安裝。格式是一個(gè)擴(kuò)展名為nbm類型的文件。
像我們稍后要介紹的Visual GC, BTrace 都是通過(guò)插件安裝,來(lái)增加對(duì)應(yīng)功能的。
概述
在概述這個(gè) Tab 中,會(huì)有當(dāng)前 JVM 進(jìn)程的一些基本信息,包含 JVM的參數(shù),系統(tǒng)屬性,Main-class 等等。類似如下圖:
請(qǐng)注意上圖紅框,這個(gè)是一般啟動(dòng)時(shí)配置的一個(gè)JVM選項(xiàng),可以在 OOM 產(chǎn)生時(shí)生成一個(gè)堆的 dump,方便事后分析。如果沒(méi)有在啟動(dòng)時(shí)配置,默認(rèn)是關(guān)閉的。這里也顯示是禁用。
通過(guò) Visual VM,可以實(shí)時(shí)變更該選項(xiàng),右擊對(duì)應(yīng)的 JVM 進(jìn)程,在彈出菜單中選擇【在出現(xiàn)OOME時(shí)生成堆 Dump】
選擇之后,對(duì)應(yīng)的概述處變?yōu)閱⒂谩?/p>
監(jiān)視
在該 Tab 中會(huì)顯示 CPU,堆的使用,已裝入的類的情況,以及線程的活動(dòng)情況等。關(guān)鍵是這里有兩個(gè)按鈕【執(zhí)行垃圾回收】和【堆 Dump】。
垃圾回收會(huì)進(jìn)行一次 Full GC,堆的Dump會(huì)生成一個(gè)當(dāng)前的dump文件供分析。
線程
線程 Tab 會(huì)將當(dāng)前進(jìn)程的所有線程按時(shí)間線的形式開(kāi)出來(lái)??梢愿鶕?jù)不同的線程狀態(tài)進(jìn)行查看。這里還可以進(jìn)行線程的 Dump,和 jstack 功能一致,生成一個(gè)所有線程的運(yùn)行調(diào)用圖。(jstack,可以查看前面的文章了解。Java七武器系列霸王槍 -- 線程狀態(tài)分析 jstack)
抽樣器
可以按照 CPU 和內(nèi)存進(jìn)行抽樣, 和Profiler類似,我們后面介紹。
Profiler
在眾多功能中,該功能可用于進(jìn)行應(yīng)用的 Profiling,分析應(yīng)用方法的占用時(shí)間,內(nèi)存中各個(gè)類的對(duì)象數(shù)量及大小等。
下方的圖是CPU profiling,分析方法的執(zhí)行時(shí)間。
這張圖是內(nèi)存的 profiling,顯示對(duì)象在內(nèi)存中的數(shù)量及大小
通過(guò)這兩種 profiling,對(duì)于應(yīng)用中有內(nèi)存占用較多的情況發(fā)生時(shí),可以觀察是哪些對(duì)象占用,是否有些代碼中存在的總是導(dǎo)致生成的大量無(wú)用的對(duì)象等。
這兩個(gè)功能和工具 MAT 的幾個(gè)功能類似。
Visual GC
注意:該 Tab 需要安裝插件后才能顯示。
一直以來(lái),Java 的 GC 對(duì)于我們來(lái)說(shuō)只能通過(guò)在命令行中展示的方式,或者是從 gc log 里查看一些 執(zhí)行情況,Visual VM 的 Visual GC 插件,可以讓我們更直觀的觀察 堆的占用,GC 的執(zhí)行情況等,是個(gè)可視化的GC 查看工具。
通過(guò)這個(gè)工具,能夠觀察堆各個(gè)區(qū)域的大小,占用情況等。比如在配置了Xms, PermSize, 或者一些 xxxRation之類的,具體分到各個(gè)代的大小是多少,除了計(jì)算之外,可以在這里直觀的查看。
同時(shí),在每個(gè)每個(gè) Gen 旁邊,都有顯示 GC 的執(zhí)行次數(shù)和時(shí)間。
BTrace
前面的文章寫過(guò)使用 BTrace 分析總是,當(dāng)時(shí)是介紹通過(guò)命令行的方式。在 Visual VM 的插件里,也有 BTrace 的插件,安裝之后,可以在本地的 JVM 進(jìn)程上右擊選擇 【Trace application】,就會(huì)打開(kāi)該 Tab,然后在窗口中直接編譯 Trace 腳本,執(zhí)行結(jié)果也會(huì)在窗口中顯示。
注意這里有一個(gè)Unsafe的開(kāi)關(guān),可以使用BTrace的更多操作,靠選擇checkbox是打不開(kāi)的。需要在@BTrace注解后增加內(nèi)容,格式如下:
- @BTrace(unsafe=true)
這樣即可,checkbox會(huì)自動(dòng)選中。
堆Dump
生成堆dump之后,相當(dāng)于對(duì)當(dāng)前的堆做了一個(gè)鏡像,可以基于此分析應(yīng)用內(nèi)的一些問(wèn)題。
整個(gè)dump中,除了摘要外,還有類,實(shí)例數(shù)等和 Profiler 中實(shí)時(shí)內(nèi)容一致。此外,還包含線程的 stackTrace。
在類中雙擊任意一個(gè)要關(guān)注的,會(huì)打開(kāi)實(shí)例數(shù)視圖,顯示該類對(duì)應(yīng)的各個(gè)實(shí)例的數(shù)據(jù)
在OQL控制臺(tái)中可以通過(guò)招待OQL來(lái)查看對(duì)象的信息,和前面 SA中介紹的類似。(Java七武器系列長(zhǎng)生劍 -- Java虛擬機(jī)的顯微鏡 Serviceability Agent)
發(fā)現(xiàn)沒(méi)有,其實(shí) JDK 提供的這些工具中,有許多功能都是相同的,通過(guò)統(tǒng)一的接口,在不同的應(yīng)用中提供相應(yīng)的數(shù)據(jù),一處水源供全球。
【本文為專欄作者“侯樹(shù)成”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)『Tomcat那些事兒』獲取授權(quán)】
當(dāng)前題目:Java七武器系列多情環(huán)--多功能Profiling工具JVisualVM
網(wǎng)頁(yè)路徑:http://m.fisionsoft.com.cn/article/dhiocej.html


咨詢
建站咨詢
