16年的時候花了一些時間整理了一些關於jvm的介紹文章,到現在回想起來仍是一些尚未補充全面。當中就包含怎樣利用工具來監控調優先後的性能變化。工具作爲圖形化界面來展現更能直觀的發現問題,還有一方面一些耗費性能的分析(dump文件分析)通常也不會在生產直接分析。每每dump下來的文件達1G左右,人工分析效率較低,所以利用工具來分析jvm相關問題,長長可以到達事半功倍的效果來。html
jvm監控分析工具通常分爲兩類,一種是jdk自帶的工具。一種是第三方的分析工具。java
jdk自帶工具通常在jdk bin文件夾如下。以exe的形式直接點擊就可以使用。當中包含分析工具已經很是強大,差點兒涉及了方方面面,但是咱們最常使用的僅僅有兩款:jconsole.exe和jvisualvm.exe;第三方的分析工具備很是多,各自的側重點不一樣。比較有表明性的:MAT(Memory Analyzer Tool)、GChisto等。算法
對於大型 JAVA 應用程序來講,再精細的測試也難以堵住所有的漏洞,即使咱們在測試階段進行了大量卓有成效的工做,很是多問題仍是會在生產環境下暴露出來,並且很是難在測試環境中進行重現。tomcat
JVM 可以記錄下問題發生時系統的部分執行狀態,並將其存儲在堆轉儲 (Heap Dump) 文件裏,從而爲咱們分析和診斷問題提供了重要的根據。當中VisualVM和MAT是dump文件的分析利器。markdown
Jconsole(Java Monitoring and Management Console)是從java5開始,在JDK中自帶的java監控和管理控制檯,用於對JVM中內存,線程和類等的監控。是一個基於JMX(java management extensions)的GUI性能監測工具。eclipse
jconsole使用jvm的擴展機制獲取並展現虛擬機中執行的應用程序的性能和資源消耗等信息。jvm
直接在jdk/bin文件夾下點擊jconsole.exe就能夠啓動,界面例如如下:工具
在彈出的框中可以選擇本機的監控本機的java應用。也可以選擇遠程的java服務來監控。假設監控遠程服務需要在tomcat啓動腳本中加入例如如下代碼:post
-Dcom.sun.management.jmxremote.port=6969
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
鏈接進去以後。就可以看到jconsole概覽圖和基本的功能:概述、內存、線程、類、VM、MBeans 性能
簡單介紹
VisualVM 是一個工具,它提供了一個可視界面,用於查看 Java 虛擬機 (Java Virtual Machine, JVM) 上執行的基於 Java 技術的應用程序(Java 應用程序)的具體信息。VisualVM 對 Java Development Kit (JDK) 工具所檢索的 JVM 軟件相關數據進行組織,並經過一種使您可以高速查看有關多個 Java 應用程序的數據的方式提供該信息。您可以查看本地應用程序以及遠程主機上執行的應用程序的相關數據。此外。還可以捕獲有關 JVM 軟件實例的數據,並將該數據保存到本地系統。以供後期查看或與其餘用戶共享。
VisualVM 是javajdk自帶的最牛逼的調優工具了吧。也是我平時使用最多調優工具,差點兒涉及了jvm調優的方方面面。相同是在jdk/bin文件夾如下雙擊jvisualvm.exe既可以使用,啓動起來後和jconsole 同樣相同可以選擇本地和遠程。假設需要監控遠程相同需要配置相關參數,主界面例如如下;
VisualVM可以根據需要安裝不一樣的插件,每個插件的關注點都不一樣。有的主要監控GC,有的主要監控內存,有的監控線程等。
怎樣安裝:
一、從主菜單中選擇「工具」>「插件」。
二、在「可用插件」標籤中。選中該插件的「安裝」複選框。單擊「安裝」。
三、逐步完畢插件安裝程序。
我這裏以 Eclipse(pid 22296)爲例。雙擊後直接展開,主界面展現了系統和jvm兩大塊內容。點擊右下方jvm參數和系統屬性可以參考具體的參數信息.
因爲VisualVM的插件太多。我這裏主要介紹三個我主要使用幾個:監控、線程、Visual GC
監控的主頁事實上也就是。cpu、內存、類、線程的圖表
線程和jconsole功能沒有太大的差異
Visual GC 是經常使用的一個功能,可以明顯的看到年輕代、老年代的內存變化,以及gc頻率、gc的時間等。
以上的功能事實上jconsole差點兒也有。VisualVM更全面更直觀一些,另外VisualVM很是多的其餘功能,可以分析dump的內存快照,dump出來的線程快照並且進行分析等,還有其餘很是多的插件你們可以去探索
MAT是什麼?
MAT(Memory Analyzer Tool),一個基於Eclipse的內存分析工具,是一個高速、功能豐富的Java heap分析工具,它可以幫助咱們查找內存泄漏和下降內存消耗。
使用內存分析工具從衆多的對象中進行分析,高速的計算出在內存中對象的佔用大小,看看是誰阻止了垃圾收集器的回收工做,並可以經過報表直觀的查看到可能形成這樣的結果的對象。
一般內存泄露分析被以爲是一件很是有難度的工做,通常由團隊中的資深人士進行。只是要介紹的 MAT(Eclipse Memory Analyzer)被以爲是一個「傻瓜式「的堆轉儲文件分析工具,你僅僅需要輕輕點擊一下鼠標就可以生成一個專業的分析報告。和其餘內存泄露分析工具相比。MAT 的使用很是easy,基本可以實現一鍵到位,即便是新手也可以很是快上手使用。
MAT以eclipse 插件的形式來安裝,具體的安裝過程就不在描寫敘述了。可以利用visualvm或者是 jmap命令生產堆文件,導入eclipse mat中生成分析報告:
生產這會報表的同一時候也會在dump文件的同級文件夾下生成三份(dump_Top_Consumers.zip、dump_Leak_Suspects.zip、dump_Top_Components.zip)分析結果的html文件,方便發送給相關同事來查看。
需要關注的是如下的Actions、Reports、Step by Step區域:
duplicate classes :檢測由多個類裝載器載入的類
Leak Suspects :內存泄漏分析
以上僅僅是一個0基礎的介紹,mat還有更強大的使用,比方對照堆內存,在生產環境中每每爲了定位問題,每隔幾分鐘dump出一下內存快照,隨後在對照不一樣一時候間的堆內存的變化來發現問題。
GChisto是一款專業分析gc日誌的工具,可以經過gc日誌來分析:Minor GC、full gc的時間、頻率等等,經過列表、報表、圖表等不一樣的形式來反應gc的狀況。儘管界面略顯粗糙。但是功能仍是不錯的。
配置好本地的jdk環境以後,雙擊GChisto.jar,在彈出的輸入框中點擊 add 選擇gc.log日誌
GC Pause Distribution:查看GC停頓的具體分佈,x軸表示垃圾收集停頓時間。y軸表示是停頓次數。
GC Timeline:顯示整個時間線上的垃圾收集
只是這款工具已經再也不維護,不能識別最新jdk的日誌文件。
GCViewer也是一款分析小工具。用於可視化查看由Sun / Oracle, IBM, HP 和 BEA Java 虛擬機產生的垃圾收集器的日誌,gcviewer我的感受顯示 的界面比較亂沒有GChisto更專業一些。
以上的兩款gc分析日誌。一個不太維護了。一個不太專業。求推薦更好的gc分析工具
前期jvm系類文章回想:
做者:清純的微笑
出處:http://www.ityouknow.com/
版權歸做者所有。轉載請註明出處