知識點-JVM快速找出耗內存大對象

問題

當我們的java應用運行時,突然出現內存佔用暴增,說明系統中存在長期佔用的對象無法回收,或者出現巨大的對象如何快速定位產生的大對象是什麼?

找到耗內存的進程

top命令查看你的應用對應的進程ID

1、輸入top命令 然後顯示當前系統的整體負載情況,

2、鍵入m 查看內存使用情況

知識點-JVM快速找出耗內存大對象

線上服務器資源情況

3、查到指定的進程編號,如上圖服務器tomcat進程25085

4、執行如下命令: jmap -histo:live 25085 | head -20 查看進程中佔用資源最大的前20個對象

知識點-JVM快速找出耗內存大對象

這是個人服務器的一個對象查看結果

5、上圖為演示命令結果,非線上服務器信息(線上信息會有敏感信息)

6、從這20個對象中進行分析,一般情況有問題時,這裡會有自己工程內的類的大對象,第四列為類名。如果這都無法定位就只能執行dump,將內存快照保存下來用eclipse的MAT工具進行詳細分析了

7、知道哪個對象消耗內存了,再去定位代碼問題就不難了。

知識點-JVM快速找出耗內存大對象

BeginCode出品


分享到:


相關文章: