利用jmap和MAT等工具查看JVM運(yùn)行時(shí)堆內(nèi)存

jmap

JDK自帶了一些工具可以幫助我們查看JVM運(yùn)行的堆內(nèi)存情況,常用的是jmap命令

如果想學(xué)習(xí)Java工程化、高性能及分布式、深入淺出。微服務(wù)、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級(jí)交流:854630135,群里有阿里大牛直播講解技術(shù),以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家。

jmap -heap <pid> 打印堆的使用情況

那么,從這個(gè)輸出中我們也可以大致看出堆的結(jié)構(gòu),分為Young Generation (年輕代) 和 Old Generation (老年代)

Young Generation又被劃分為:Eden Space , From Space 和 To Space

可以看到這里To區(qū)是干凈的,還未被使用,F(xiàn)rom區(qū)已經(jīng)使用了95%了

jmap -histo[:live] <pid> 打印類的實(shí)例數(shù)量、占用的內(nèi)存、類的名稱,通常我們并不需要看所有的,只需要看前幾條即可

jmap -dump:live,format=b,file=heap.bin <pid>

以hprof二進(jìn)制格式dump堆的使用情況(PS:相當(dāng)于生成一個(gè)快照,后續(xù)我們可以對(duì)這個(gè)快照文件進(jìn)行分析)

Memory Analyzer (MAT)

文件dump下來(lái)以后,可以使用Eclipse的MAT插件進(jìn)行查看

如果日常開發(fā)用的是eclipse的話,可以直接安裝這個(gè)插件,如果不是的話,這個(gè)插件也可以獨(dú)立運(yùn)行

https://www.eclipse.org/mat/

https://www.eclipse.org/mat/downloads.php

解壓之后雙擊MemoryAnalyzer.exe即可運(yùn)行

打開剛才的heap.bin文件

可以看到下面有三個(gè)選項(xiàng)卡,包括可以執(zhí)行的操作和報(bào)表

先看第一個(gè)Histogram

如果想學(xué)習(xí)Java工程化、高性能及分布式、深入淺出。微服務(wù)、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級(jí)交流:854630135,群里有阿里大牛直播講解技術(shù),以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家。

由于這里是隨便運(yùn)行的一個(gè)工程,并沒(méi)有出現(xiàn)內(nèi)存泄漏之類的問(wèn)題,所以這里看到的都是一些基礎(chǔ)的java類

查看引用

Dominator Tree?可以看到biggest object以及它們所占內(nèi)存的比例

我們一級(jí)一級(jí)的找,可以找到源文件,然后分析代碼,最終定位到問(wèn)題之根源

jconsole

可以查看本地的進(jìn)程,也可以查看遠(yuǎn)程主機(jī)上的進(jìn)程

例如:jconsole 192.168.102.16:9105

或者本地

其它

如果想學(xué)習(xí)Java工程化、高性能及分布式、深入淺出。微服務(wù)、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級(jí)交流:854630135,群里有阿里大牛直播講解技術(shù),以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 在遇到實(shí)際性能問(wèn)題時(shí),除了關(guān)注系統(tǒng)性能指標(biāo)。還要結(jié)合應(yīng)用程序的系統(tǒng)的日志、堆棧信息、GClog、thread...
    Java小鋪閱讀 2,607評(píng)論 0 25
  • 1.MAT簡(jiǎn)介:jvm內(nèi)存溢出/內(nèi)存泄漏問(wèn)題分析定位神器 MAT 全稱Eclipse Memory Analysi...
    極簡(jiǎn)架構(gòu)閱讀 22,871評(píng)論 1 20
  • JVM是虛擬機(jī),也是一種規(guī)范,他遵循著馮·諾依曼體系結(jié)構(gòu)的設(shè)計(jì)原理。馮·諾依曼體系結(jié)構(gòu)中,指出計(jì)算機(jī)處理的數(shù)據(jù)和指...
    Java小鋪閱讀 1,337評(píng)論 0 16
  • 什么時(shí)候用: 當(dāng)服務(wù)發(fā)生GC問(wèn)題時(shí),一般會(huì)使用jmap工具進(jìn)行分析. 有什么用:查看堆各個(gè)對(duì)象的數(shù)量,大小dump...
    巨子聯(lián)盟閱讀 3,246評(píng)論 0 1
  • 以下是Java自帶的性能監(jiān)控工具 必要時(shí)我們需要抓取Java全內(nèi)存的Dump來(lái)分析,抓取方式有如下: | jhat...
    jackcooper閱讀 1,018評(píng)論 2 10

友情鏈接更多精彩內(nèi)容