利用jmap和MAT等工具查看JVM运行时堆内存
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
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ū)是干凈的,還未被使用,From區(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下來以后,可以使用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è)工程,并沒有出現(xiàn)內(nèi)存泄漏之類的問題,所以這里看到的都是一些基礎(chǔ)的java類
查看引用
?
Dominator Tree?可以看到biggest object以及它們所占內(nèi)存的比例
?
我們一級(jí)一級(jí)的找,可以找到源文件,然后分析代碼,最終定位到問題之根源
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)分享給大家。
轉(zhuǎn)載于:https://my.oschina.net/u/3990817/blog/3007026
總結(jié)
以上是生活随笔為你收集整理的利用jmap和MAT等工具查看JVM运行时堆内存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [译]GPU加持,TensorFlow
- 下一篇: UiBot Creator v1.2火热