您好,登錄后才能下訂單哦!
java的可視化監(jiān)測工具怎么用,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
一句話概括:jdk本身自帶的監(jiān)控工具jconsole和jvisualvm可以更方便,更直觀地對java應(yīng)用進(jìn)行性能監(jiān)測,下文為你講解如何使用它們。
前面幾篇文章(見下文“相關(guān)閱讀”)已經(jīng)對jdk的命令行工具進(jìn)行了介紹,但它們使用起來相對還是不夠直觀,而且一般都需要在本機(jī)上使用,有沒有更方便,更直觀的方式來對java應(yīng)用進(jìn)行監(jiān)測?其實(shí),jdk本身已經(jīng)提供了java監(jiān)測的GUI工具,分別是jconsole
和jvisualvm
,下面對這兩款工具的功能及使用進(jìn)行描述。
jconsole是jdk一個(gè)內(nèi)置Java性能分析器,在JDK安裝目錄下的bin目錄,在windows下,可以從命令行(jconsole.exe
)或直接雙擊jconsole.exe啟動(dòng)運(yùn)行。讀者有興趣可以參考jconsole工具的官方使用文檔:https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html
jconsole啟動(dòng)時(shí),會(huì)提供兩種連接方式,分別是連接本地進(jìn)程和連接遠(yuǎn)程進(jìn)程。它會(huì)直接列出本地java進(jìn)程來選擇。若是需要監(jiān)測遠(yuǎn)程的java進(jìn)程,則勾選遠(yuǎn)程進(jìn)程,然后輸入<hostname>:<port>。這需要遠(yuǎn)程的java進(jìn)程啟動(dòng)時(shí),設(shè)置JMX的遠(yuǎn)程連接參數(shù),否則是無法連接的,關(guān)于遠(yuǎn)程連接的JMX技術(shù),可以參考官方文章(https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html
)參數(shù)分別是以下幾個(gè):
# 需要監(jiān)控的服務(wù)器IP -Djava.rmi.server.hostname=192.168.222.10 # 提供監(jiān)控的java進(jìn)程端口 -Dcom.sun.management.jmxremote.port=9004 # 指定后續(xù)的通訊端口,與上面一致 -Dcom.sun.management.jmxremote.rmi.port=9004 # 不使用ssl登錄,若有安全需求,可設(shè)置 -Dcom.sun.management.jmxremote.ssl=false # 不驗(yàn)證,若有安全需求,可設(shè)置 -Dcom.sun.management.jmxremote.authenticate=false
如下圖所示:
注意,由于不使用ssl
,會(huì)提示"不安全連接",點(diǎn)擊它即可。
啟動(dòng)并連接java進(jìn)程后,jconsole的界面是比較簡潔的,分為6個(gè)模塊:
概述:對java進(jìn)程的總體概覽,包括堆,線程數(shù),類,CPU占用率的變化折線圖。
內(nèi)存:顯示堆及非堆的內(nèi)存使用信息,類似jmap和jstat
線程:顯示線程使用信息,類似jstack
類:顯示類裝載信息
VM摘要:顯示JVM信息,類似jinfo
MBeans:顯示MBeans信息(用得比較少)
概覽主要顯示堆,線程數(shù),類,CPU占用率的變化折線圖,基本上可以直接根據(jù)折線圖來查看應(yīng)用概況。如果堆占用內(nèi)存很高,活動(dòng)線程數(shù)很多,CPU占用率很高,那就可以直接進(jìn)入到相應(yīng)的區(qū)域看詳細(xì)內(nèi)容來查找原因了。另外,右擊對應(yīng)的圖,可以把數(shù)據(jù)導(dǎo)出到csv文件來分析。如圖:
內(nèi)存是我們監(jiān)測的重點(diǎn)區(qū)域,可以參看堆內(nèi)存,非堆內(nèi)存,內(nèi)存池的狀況,GC次數(shù)和時(shí)間,可以手動(dòng)進(jìn)行GC查看內(nèi)存變化。如下圖:
其中,圖的上方可以選擇查看哪個(gè)內(nèi)存的變化(堆、非堆,old區(qū),eden區(qū),survivor區(qū),metaspace區(qū)等),也可以手動(dòng)執(zhí)行GC查看變化情況。圖下方有顯示內(nèi)存的大小及使用大小,GC的次數(shù)和使用時(shí)間,同時(shí)以柱狀圖的方式來顯示堆和非堆的變化。因此,對于有內(nèi)存溢出,OOM這些問題,看這里的監(jiān)測數(shù)據(jù)非常適合。
線上應(yīng)用,線程長時(shí)間停頓的主要原因主要有:等待外部資源(數(shù)據(jù)庫連接、網(wǎng)絡(luò)資源、設(shè)備資 源等)、死循環(huán)、鎖等待(活鎖和死鎖),這些都需要監(jiān)測java應(yīng)用的線程運(yùn)行狀況,如下圖:
線程數(shù)變化情況及點(diǎn)擊某個(gè)線程查看運(yùn)行狀態(tài)來分析,其中還可以點(diǎn)擊“檢測死鎖”功能來處理死鎖問題。
此功能主要用于查看加載的類總數(shù),如果加載的類一直在增加,就得查看代碼是否有不斷產(chǎn)生類的代碼了。如下圖:
當(dāng)我們對java應(yīng)用添加了啟動(dòng)參數(shù)( JAVA_OPTS
),若想在線上查看此應(yīng)用的實(shí)際使用情況,參數(shù)是否生效,命令行工具我們是用jinfo,現(xiàn)在在這里可以直接看到,而且包括了系統(tǒng)信息,類信息,堆信息及相關(guān)的VM參數(shù)。如下圖:
與jconsole
類似,jdk在bin目錄下還提供了jvisualvm
工具,相對來說,jvisualvm
更為強(qiáng)大,在windows下,可以從命令行(jvisualvm.exe
)或直接雙擊jvisualvm.exe
啟動(dòng)運(yùn)行。讀者有興趣可以參考jvisualvm
工具的官方使用文檔:https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/index.html
跟jconsole
一樣,jvisualvm
可以監(jiān)測本地的java進(jìn)程,也可以監(jiān)測遠(yuǎn)程的java進(jìn)程。本地進(jìn)程直接選擇即可,遠(yuǎn)程進(jìn)程同樣需要java進(jìn)程添加JMX啟動(dòng)參數(shù)。
jvisualvm的功能比較強(qiáng)大,主要包括以下幾項(xiàng)功能:
顯示虛擬機(jī)進(jìn)程以及進(jìn)程的配置、環(huán)境信息(jps、jinfo)。
監(jiān)視應(yīng)用程序的CPU、GC、堆、方法區(qū)(1.7及以前)、元空間(JDK1.8及以后)以及線程的信息,相當(dāng)于jmap,jstat,jstack。
dump以及分析堆轉(zhuǎn)儲(chǔ)快照(jmap,jhat)。
方法級的程序運(yùn)行性能分析,找出被調(diào)用最多、運(yùn)行時(shí)間最長的方法。
離線程序快照:收集程序的運(yùn)行時(shí)配置、線程dump、內(nèi)存dump等信息建立一個(gè)快照
界面上的功能主要分為幾大模塊,分別是概述、監(jiān)視、線程、抽樣器。
概述相當(dāng)是java命令行工具中的jps
及jinfo
,可以顯示進(jìn)程以及進(jìn)程的配置、系統(tǒng)屬性,啟動(dòng)參數(shù)等,與jconsole
的"VM概要"差不多。如下圖:
此功能相當(dāng)于jconsole
的"概覽"功能,同樣是以圖形化的方式,顯示CPU、堆變化、線程數(shù)變化及加載類情況,但它有一個(gè)功能是可以遠(yuǎn)程dump出堆轉(zhuǎn)儲(chǔ)快照(相當(dāng)于jmap -dump:file=./heap.hprof PID
),dump時(shí)會(huì)選擇文件存儲(chǔ)位置。
dump出的堆快照,我們可以手動(dòng)把文件下載下來,然后使用它的“裝入快照”功能加載到jvisualvm
(裝入時(shí)需要選擇文件類型是以"hprof"類型),進(jìn)一步分析堆的內(nèi)存情況。裝入后,會(huì)包含概要信息,類和實(shí)例占用內(nèi)存情況,雙擊類還可以看到具體的實(shí)例數(shù),若是發(fā)現(xiàn)某些類的實(shí)例數(shù)很多,或者占用的內(nèi)存大小比較高,則可以知道問題所在。如下所示:
此此功能相當(dāng)于jconsole
的"線程"功能,但更豐富,它把每個(gè)線程的運(yùn)行狀態(tài),運(yùn)行時(shí)間都以圖形化的方式顯示,同時(shí)還可以進(jìn)行遠(yuǎn)程線程dump,這個(gè)功能,其實(shí)就是jstack -l
功能,dump出來后,直接顯示到界面中。如下:
抽樣器是jvisualvm
的獨(dú)有功能,可以對CPU和內(nèi)存進(jìn)行抽樣顯示,每隔一段時(shí)間把內(nèi)存信息,線程信息,可以很方便的集中精力分析某一段時(shí)間的數(shù)據(jù)變化(可以以層級方式顯示細(xì)到方法的執(zhí)行時(shí)間,類占用內(nèi)存情況等),同時(shí)也提供執(zhí)行GC、內(nèi)存dump及線程dump功能。如下:
有了jconsole
和jvisualvm
兩款可視化工具,可以減少命令行的輸入,以更方便,更直觀的方式來監(jiān)測java應(yīng)用的內(nèi)存、線程、CPU等信息,是處理java線上問題的好幫手。不過要注意一點(diǎn)的是,使用這兩款工具之前,我們還是需要對JVM,Java程序運(yùn)行機(jī)制,線程等知識(shí)有一定的積累。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。