jmapphp
JDK自帶了一些工具能夠幫助咱們查看JVM運行的堆內存狀況,經常使用的是jmap命令java
若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。eclipse
jmap -heap <pid> 打印堆的使用狀況分佈式
那麼,從這個輸出中咱們也能夠大體看出堆的結構,分爲Young Generation (年輕代) 和 Old Generation (老年代)微服務
Young Generation又被劃分爲:Eden Space , From Space 和 To Space工具
能夠看到這裏To區是乾淨的,還未被使用,From區已經使用了95%了源碼分析
jmap -histo[:live] <pid> 打印類的實例數量、佔用的內存、類的名稱,一般咱們並不須要看全部的,只須要看前幾條便可性能
jmap -dump:live,format=b,file=heap.bin <pid>學習
以hprof二進制格式dump堆的使用狀況(PS:至關於生成一個快照,後續咱們能夠對這個快照文件進行分析)插件
Memory Analyzer (MAT)
文件dump下來之後,可使用Eclipse的MAT插件進行查看
若是平常開發用的是eclipse的話,能夠直接安裝這個插件,若是不是的話,這個插件也能夠獨立運行
https://www.eclipse.org/mat/
https://www.eclipse.org/mat/downloads.php
解壓以後雙擊MemoryAnalyzer.exe便可運行
打開剛纔的heap.bin文件
能夠看到下面有三個選項卡,包括能夠執行的操做和報表
先看第一個Histogram
若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。
因爲這裏是隨便運行的一個工程,並無出現內存泄漏之類的問題,因此這裏看到的都是一些基礎的java類
查看引用
Dominator Tree 能夠看到biggest object以及它們所佔內存的比例
咱們一級一級的找,能夠找到源文件,而後分析代碼,最終定位到問題之根源
jconsole
能夠查看本地的進程,也能夠查看遠程主機上的進程
例如:jconsole 192.168.102.16:9105
或者本地
其它
若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。