日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4大JVM性能分析工具详解,及内存泄漏分析方案

發(fā)布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4大JVM性能分析工具详解,及内存泄漏分析方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

談到性能優(yōu)化分析一般會涉及到:

Java代碼層面的,典型的循環(huán)嵌套等

還會涉及到Java JVM:內(nèi)存泄漏溢出等

MySQL數(shù)據(jù)庫優(yōu)化:分庫分表、慢查詢、長事務(wù)的優(yōu)化等

阿里P8架構(gòu)師談:MySQL慢查詢優(yōu)化、索引優(yōu)化、以及表等優(yōu)化總結(jié)

阿里P8架構(gòu)師談:架構(gòu)設(shè)計之?dāng)?shù)據(jù)庫垂直、水平拆分六大原則(數(shù)據(jù)庫分庫分表)

常用的后端性能優(yōu)化六種方式:緩存化+服務(wù)化+異步化等

阿里P8架構(gòu)師談:MySQL數(shù)據(jù)庫的索引原理、與慢SQL優(yōu)化的5大原則

阿里P8架構(gòu)師談:Web前端、應(yīng)用服務(wù)器、數(shù)據(jù)庫SQL等性能優(yōu)化總結(jié)

阿里P8架構(gòu)師談:多線程、架構(gòu)、異步消息、Redis等性能優(yōu)化策略


今天主要分享JVM性能調(diào)優(yōu)工具,文末有詳細(xì)的JVM調(diào)優(yōu)方法和步驟。

什么場景需要JVM調(diào)優(yōu)

  • OutOfMemoryError,內(nèi)存不足
  • 內(nèi)存泄露
  • 線程死鎖
  • 鎖爭用(Lock Contention)
  • Java進(jìn)程消耗CPU過高
  • 這些問題出現(xiàn)的時候常常通過重啟服務(wù)器或者調(diào)大內(nèi)存來臨時解決,實際情況,還需要盡量還原當(dāng)時的業(yè)務(wù)場景,并分析內(nèi)存、線程等數(shù)據(jù),通過分析找到最終的解決方案,這就會涉及到性能分析工具。

    JVM性能監(jiān)控分析工具

    JDK本身提供了很豐富的性能監(jiān)控工具,除了集成式的visualVM和jConsole外,還有jstat,jstack,jps,jmap,jhat小工具,這些都是性能調(diào)優(yōu)的常用工具。

  • Jconsole : jdk自帶,功能簡單,但是可以在系統(tǒng)有一定負(fù)荷的情況下使用。對垃圾回收算法有很詳細(xì)的跟蹤。
  • JProfiler:商業(yè)軟件,功能強大。
  • VisualVM:JDK自帶,功能強大,與JProfiler類似。
  • MAT:MAT(Memory Analyzer Tool),一個基于Eclipse的內(nèi)存分析工具。
  • 下面介紹這些JVM工具的使用。

    JVM性能調(diào)優(yōu)工具

    VisualVM

    VisualVM 是javajdk自帶的牛逼的調(diào)優(yōu)工具,也是平時使用最多調(diào)優(yōu)工具,幾乎涉及了jvm調(diào)優(yōu)的方方面面。啟動起來后和jconsole 一樣同樣可以選擇本地和遠(yuǎn)程,如果需要監(jiān)控遠(yuǎn)程同樣需要配置相關(guān)參數(shù)。

    1 打開VisualVM

    這個工具放在JDK安裝目錄的bin目錄下,雙擊jvisualvm.exe即可打開,如下圖所示

    2. 監(jiān)視頁面主要展示 系統(tǒng)資源占用情況

    • CPU :展示java程序運行的時候占用的cpu資源
    • :這里要說明下堆內(nèi)存的組成部分,堆是由老年代和新生代組成,其中新生代有由”伊甸園”和”兩個幸存區(qū)組成”三部分組成,堆視圖看到的資源占用實際是”老年代”、”伊甸園(Eden)”、”兩個幸存者(Survivor )”的一個綜合情況。
    • PermGen :Perm 區(qū)用來存放java類以及其他虛擬機(jī)自己的靜態(tài)數(shù)據(jù),(常被稱為持久代或者方法區(qū))
    • :此視圖 主要展示 當(dāng)前程序加載了多少個類
    • 線程: 當(dāng)前程序的線程啟動情況
    • 堆Dump : 生產(chǎn)當(dāng)前程序的內(nèi)存快照hprof文件,對于分析內(nèi)存溢出問題比較有幫助。

    3. 線程頁面(主要展示程序中所有的線程運行狀態(tài))

    • 線程dump : 所有線程的快照(對分析線程死鎖,比較有幫助
    • 時間線 : 展示每個線程的實時運行狀態(tài)(不同顏色代表不同的狀態(tài))

    VisualVM可以根據(jù)需要安裝不同的插件,每個插件的關(guān)注點都不同,有的主要監(jiān)控GC,有的主要監(jiān)控內(nèi)存,有的監(jiān)控線程等。

    Jconsole

    JConsole是一個JMX(Java
    Management
    Extensions,即Java管理擴(kuò)展)的JVM監(jiān)控與管理工具,監(jiān)控主要體現(xiàn)在:堆棧內(nèi)存、線程、CPU、類、VM信息這幾個方面,而管理主要是對JMX
    MBean(managed
    beans,被管理的beans,是一系列資源,包含對象、接口、設(shè)備等)的管理,不僅能查看bean的屬性和方法信息,還能夠在運行時修改屬性或調(diào)用方法。

    1.打開Jconsole

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

    1、內(nèi)存

    在內(nèi)存頁我們可以看到程序運行期間JVM各個部分的內(nèi)存狀況,右下角是對應(yīng)各個分區(qū)的內(nèi)存使用柱狀圖,點擊對應(yīng)柱可查看詳情,看圖:

    2、線程

    該頁面可以查看當(dāng)前JVM進(jìn)程啟動了多少個線程,并能查看每個線程的狀態(tài)及堆棧信息,此外還有一個功能就是能夠自動檢測死鎖,見圖:

    3、類

    該頁面其實和線程頁有些相似,不過顯示的是JVM加載類的信息,見圖:

    4、VM概述

    這個其實沒必要細(xì)說,看圖就明白,顯示了當(dāng)前JVM的各方面信息:

    5、MBean管理

    MAT

    MAT(Memory Analyzer Tool),一個基于Eclipse的內(nèi)存分析工具,是一個快速、功能豐富的Java heap分析工具,它可以幫助我們查找內(nèi)存泄漏和減少內(nèi)存消耗。

    可以利用visualvm或者是 jmap命令生產(chǎn)堆文件在進(jìn)行內(nèi)存分析。

    1. 用jmap生成堆信息

    這樣在E盤的jmap文件夾里會有一個map.bin的堆信息文件

    2. 將堆信息導(dǎo)入到mat中分析

    3. 生成分析報告

    可以利用visualvm或者是 jmap命令生產(chǎn)堆文件,導(dǎo)入eclipse mat中生成分析報告:

    1)Histogram(直方圖)視圖

    • Class Name : 類名稱,java類名
    • Objects : 類的對象的數(shù)量,這個對象被創(chuàng)建了多少個
    • Shallow Heap :一個對象內(nèi)存的消耗大小,不包含對其他對象的引用
    • Retained Heap :是shallow Heap的總和,也就是該對象被GC之后所能回收到內(nèi)存的總和

    通過直方圖視圖可以很容易找到占用內(nèi)存最多的幾個類(通過Retained Heap排序),還可以通過其他方式進(jìn)行分組(見下圖)。

    如果存在內(nèi)存溢出,時間久了溢出類的實例數(shù)量或者內(nèi)存占比會越來越多,排名也越來越靠前。

    圖標(biāo)進(jìn)行對比,通過多次對比不同時間點下的直方圖對比就很容易把溢出的類找出來。

    2)支配樹(Dominator Tree)

    MAT提供了一個稱為支配樹(Dominator Tree)的對象圖。支配樹體現(xiàn)了對象實例間的支配關(guān)系,在此視圖中列出了每個對象(Object Instance)與其引用關(guān)系的樹狀結(jié)構(gòu),同時包含了占用內(nèi)存的大小和百分比。

    通過Dominator Tree視圖可以很容易的找出占用內(nèi)存最多的幾個對象(根據(jù)Retained Heap或Percentage排序),和Histogram類似,可以通過不同的方式進(jìn)行分組顯示:

    Histogram視圖和Dominator Tree視圖的角度不同,前者是基于類的角度,后者是基于對象實例的角度,并且可以更方便的看出其引用關(guān)系。

    以上只是一個初步的介紹,mat還有更強大的使用,比如對比堆內(nèi)存,在生產(chǎn)環(huán)境中往往為了定位問題,每隔幾分鐘dump出一下內(nèi)存快照,隨后在對比不同時間的堆內(nèi)存的變化來發(fā)現(xiàn)問題。

    JVM內(nèi)存泄漏分析

    造成OutOfMemoryError內(nèi)存泄露典型原因:對象已經(jīng)死了,無法通過垃圾收集器進(jìn)行自動回收,需要通過找出泄露的代碼位置和原因,才好確定解決方案。

    分析步驟:

    1. 用工具生成java應(yīng)用程序的heap dump(如jmap)

    2. 使用Java heap分析工具(如MAT),找出內(nèi)存占用超出預(yù)期的嫌疑對象

    3. 根據(jù)情況,分析嫌疑對象和其他對象的引用關(guān)系。

    4. 分析程序的源代碼,找出嫌疑對象數(shù)量過多的原因。

    更多詳細(xì)JVM調(diào)優(yōu)分析和參數(shù)設(shè)置請參考JVM性能調(diào)優(yōu)的6大步驟,及關(guān)鍵調(diào)優(yōu)參數(shù)詳解

    你可能也喜歡:

  • 直通BAT必考題系列:JVM的4種垃圾回收算法、垃圾回收機(jī)制與總結(jié)
  • 直通BAT必考題系列:7種JVM垃圾收集器特點,優(yōu)劣勢、及使用場景
  • 直通BAT必考題系列:JVM性能調(diào)優(yōu)的6大步驟,及關(guān)鍵調(diào)優(yōu)參數(shù)詳解
  • 直通BAT JVM必考題:Minor GC、Major GC、Full GC的區(qū)別
  • 阿里P8架構(gòu)師談:JVM的內(nèi)存分配、運行原理、回收算法機(jī)制
  • Java必考題目之JVM面試題目和答案

  • 總結(jié)

    以上是生活随笔為你收集整理的4大JVM性能分析工具详解,及内存泄漏分析方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。