JVM快速找出耗記憶體大物件
阿新 • • 發佈:2019-06-18
問題
當我們的java應用執行時,突然出現記憶體佔用暴增,說明系統中存在長期佔用的物件無法回收,或者出現巨大的物件如何快速定位產生的大物件是什麼?
找到耗記憶體的程序
top命令檢視你的應用對應的程序ID
1、輸入top命令 然後顯示當前系統的整體負載情況,
2、鍵入m 檢視記憶體使用情況
線上伺服器資源情況
3、查到指定的程序編號,如上圖伺服器tomcat程序25085
4、執行如下命令: jmap -histo:live 25085 | head -20 檢視程序中佔用資源最大的前20個物件
這是個人伺服器的一個物件檢視結果
5、上圖為演示命令結果,非線上伺服器資訊(線上資訊會有敏感資訊)
6、從這20個物件中進行分析,一般情況有問題時,這裡會有自己工程內的類的大物件,第四列為類名。如果這都無法定位就只能執行dump,將記憶體快照儲存下來用eclipse的MAT工具進行詳細分析了
7、知道哪個物件消耗記憶體了,再去定位程式碼問題就不難了。
原文地址: http://www.toutiao.com/i6466897103623815694/
小禮物走一走,來簡書關注我