Java虛擬機器(六):JVM調優-工具篇

來源:互聯網
上載者:User

標籤:是什麼   duplicate   記錄檔   分析日誌   時間   href   dev   manage   功能   

 

工具做為圖形化介面來展示更能直觀的發現問題,另一方面一些耗費效能的分析(dump檔案分析)一般也不會在生產直接分析,往往dump下來的檔案達1G左右,人工分析效率較低,因此利用工具來分析jvm相關問題,長長可以到達事半功倍的效果來。

jvm監控分析工具一般分為兩類,一種是jdk內建的工具,一種是第三方的分析工具。jdk內建工具一般在jdk bin目錄下面,以exe的形式直接點擊就可以使用,其中包含分析工具已經很強大,幾乎涉及了方方面面,但是我們最常使用的只有兩款:jconsole.exe和jvisualvm.exe;第三方的分析工具有很多,各自的側重點不同,比較有代表性的:MAT(Memory Analyzer Tool)、GChisto等。

對於大型 JAVA 應用程式來說,再精細的測試也難以堵住所有的漏洞,即便我們在測試階段進行了大量卓有成效的工作,很多問題還是會在生產環境下暴露出來,並且很難在測試環境中進行重現。JVM 能夠記錄下問題發生時系統的部分運行狀態,並將其儲存在堆轉儲 (Heap Dump) 檔案中,從而為我們分析和診斷問題提供了重要的依據。其中VisualVM和MAT是dump檔案的分析利器。

 

jdk內建的工具

 

jconsole

Jconsole(Java Monitoring and Management Console)是從java5開始,在JDK中內建的java監控和管理主控台,用於對JVM中記憶體,線程和類等的監控,是一個基於JMX(java management extensions)的GUI效能監測工具。jconsole使用jvm的擴充機制擷取並展示虛擬機器中啟動並執行應用程式的效能和資源消耗等資訊。

直接在jdk/bin目錄下點擊jconsole.exe即可啟動,介面如下:

在彈出的框中可以選擇原生監控原生java應用,也可以選擇遠端java服務來監控,如果監控遠程服務需要在tomcat啟動指令碼中添加如下代碼:

 -Dcom.sun.management.jmxremote.port=6969   -Dcom.sun.management.jmxremote.ssl=false   -Dcom.sun.management.jmxremote.authenticate=false

串連進去之後,就可以看到jconsole概覽圖和主要的功能:概述、記憶體、線程、類、VM、MBeans

  • 概述,以圖表的方式顯示出堆記憶體使用量量,活動線程數,已載入的類,CUP佔用率的折線圖,可以非常清晰的觀察在程式執行過程中的變動情況。

  • 記憶體,主要展示了記憶體的使用方式,同時可以查看堆和非堆記憶體的變化值對比,也可以點擊執行GC來處罰GC的執行

  • 線程,主介面展示線程數的活動數和峰值,同時點擊左下方線程可以查看線程的詳細資料,比如線程的狀態是什麼,堆棧內容等,同時也可以點擊“檢測死結”來檢查線程之間是否有死結的情況。

  • 類,主要展示已載入類的相關資訊。
  • VM 概要,展示JVM所有資訊總覽,包括基本資料、線程相關、堆相關、作業系統、VM參數等。
  • Mbean,查看Mbean的屬性,方法等。

 

VisualVM

簡介

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,有的主要監控記憶體,有的監控線程等。

如何安裝:

1、從主菜單中選擇“工具”>“外掛程式”。
2、在“可用外掛程式”標籤中,選中該外掛程式的“安裝”複選框。單擊“安裝”。
3、逐步完成外掛程式安裝程式。

我這裡以 Eclipse(pid 22296)為例,雙擊後直接展開,主介面展示了系統和jvm兩大塊內容,點擊右下方jvm參數和系統屬性可以參考詳細的參數資訊.

因為VisualVM的外掛程式太多,我這裡主要介紹三個我主要使用幾個:監控、線程、Visual GC

監控的首頁其實也就是,cpu、記憶體、類、線程的圖表

線程和jconsole功能沒有太大的區別

Visual GC 是常常使用的一個功能,可以明顯的看到年輕代、老年代的記憶體變化,以及gc頻率、gc的時間等。

以上的功能其實jconsole幾乎也有,VisualVM更全面更直觀一些,另外VisualVM非常多的其它功能,可以分析dump的記憶體快照,dump出來的線程快照並且進行分析等,還有其它很多的外掛程式大家可以去探索

 

第三方調優工具

 

MAT

MAT是什嗎?

MAT(Memory Analyzer Tool),一個基於Eclipse的記憶體分析工具,是一個快速、功能豐富的Java heap分析工具,它可以協助我們尋找記憶體流失和減少記憶體消耗。使用記憶體分析工具從眾多的對象中進行分析,快速的計算出在記憶體中對象的佔用大小,看看是誰阻止了垃圾收集器的回收工作,並可以通過報表直觀的查看到可能造成這種結果的對象。

通常記憶體泄露分析被認為是一件很有難度的工作,一般由團隊中的資深人士進行。不過要介紹的 MAT(Eclipse Memory Analyzer)被認為是一個“傻瓜式“的堆轉儲檔案分析工具,你只需要輕輕點擊一下滑鼠就可以產生一個專業的分析報告。和其他記憶體泄露分析工具相比,MAT 的使用非常容易,基本可以實現一鍵到位,即使是新手也能夠很快上手使用。

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地區:

  • Histogram:列出記憶體中的對象,對象的個數以及大小,支援Regex尋找,也可以計算出該類所有對象的retained size

  • Dominator Tree:列出最大的對象以及其依賴存活的Object (大小是以Retained Heap為標準排序的)

  • Top Consumers : 通過圖形列出最大的object

  • duplicate classes :檢測由多個類裝載器載入的類

  • Leak Suspects :記憶體流失分析

  • Top Components: 列出大於總堆數的百分之1的報表。

  • Component Report:分析對象屬於同一個包或者被同一個類載入器載入

以上只是一個初級的介紹,mat還有更強大的使用,比如對比堆記憶體,在生產環境中往往為了定位問題,每隔幾分鐘dump出一下記憶體快照,隨後在對比不同時間的堆記憶體的變化來發現問題。

 

GChisto

GChisto是一款專業分析gc日誌的工具,可以通過gc日誌來分析:Minor GC、full gc的時間、頻率等等,通過列表、報表、圖表等不同的形式來反應gc的情況。雖然介面略顯粗糙,但是功能還是不錯的。

配置好本地的jdk環境之後,雙擊GChisto.jar,在彈出的輸入框中點擊 add 選擇gc.log日誌

  • GC Pause Stats:可以查看GC 的次數、GC的時間、GC的開銷、最大GC時間和最小GC時間等,以及相應的柱狀圖

  • GC Pause Distribution:查看GC停頓的詳細分布,x軸表示垃圾收集停頓時間,y軸表示是停頓次數。

  • GC Timeline:顯示整個時間軸上的垃圾收集

不過這款工具已經不再維護,不能識別最新jdk的記錄檔。

 

gcviewer

GCViewer也是一款分析小工具,用於可視化查看由Sun / Oracle, IBM, HP 和 BEA JAVA 虛擬機器產生的垃圾收集器的日誌,gcviewer個人感覺顯示 的介面比較亂沒有GChisto更專業一些。

以上的兩款gc分析日誌,一個不太維護了,一個不太專業,求推薦更好的gc分析工具

 

本文轉載自

原文純潔的微笑 

原文地址:http://www.cnblogs.com/ityouknow/p/5603287.html

 

Java虛擬機器(六):JVM調優-工具篇

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.