技術主題
在之前的開發的一個項目中,因為程序的一個bug,導致一些引用的對象一直沒有回收,從而導致堆內存一直在增大,老年代一直在增大,老年代進行堆積,后來的排查思路是通過dump堆的文件,然后對文件進行分析,判斷當前未回收的大對象。然后在程序中定位到代碼,從而進行分析,我寫這個博客是為了在這里總結一下,分析堆文件。
模塊一:生成dump文件
首先在堆內存偏高的實例上進行dump分析,命令為
jps
jmap -dump:format=b,file=heapdump.hprof PID
這里的pid是當前進程id,首先通過jps獲取當前
模塊二:排查方式一
第一種是直接在Idea打開profiler,然后將文件放到這里
排查方式二
直接在fastthread.io進行分析,只需要導入堆文件,稍等一會就可以出分析結果,可以看到大對象或者沒有回收的對象。但是這個網站有一個缺點是,限制了對于大文件的讀取,也就是說如果想要分析的是大文件,會報文件太大導致不能分析。