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