生產內存溢出,通過jprofiler對dump文件進行分析

 

 

選擇"Open Snapshot",點擊"Open a single Snapshot "加載dump文件.

若dump文件jProfiler無法識別,則可以直接修改後綴,如:*.hprof,*.jps,*.bin等

加載dump文件完成,界面如下: 

作者插入,重點關注"Current Object Set" 和"Thread Dump",即:

1.Current Object Set: 確定相關對象,找到對應的線程.

2.在Thread Dump中查找對應的線程,確定方法調用棧,找到具體的業務操作.

 

言歸正傳,因內存溢出,更多的關注佔內存大小,可以點擊"size"排序,對內存佔用最多的對象進行分析

下面以佔內存最大對象爲例,具體分析

 

 

已經訪問到基礎類java.lang.Object[],則此時可以點擊"Biggest Objects",查看佔內存最大對象,即查看剛剛創建的Todo列表,點擊單一對象,爲相關業務對象具體內容.如果對相關業務熟悉,應該已經知道什麼業務的處理對象了.

點擊"show in graph" ,可以通過調用鏈,可以查找到對應的線程棧.

調用鏈截圖,如下: 

 

具體線程調用棧信息

 至此,已經找到了相關業務的調用方法,再具體分析相關代碼,找出原因,進行優化即可解決內存溢出問題.

簡單說明:線上問題,因一次性調用過多數據,其列表對象就是Todo對象(大對象),導致加載到內存太大,GC無法及時處理,導致內存溢出.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章