問題
當(dāng)我們的java應(yīng)用運行時,突然出現(xiàn)內(nèi)存占用暴增,說明系統(tǒng)中存在長期占用的對象無法回收,或者出現(xiàn)巨大的對象如何快速定位產(chǎn)生的大對象是什么?
找到耗內(nèi)存的進程
top命令查看你的應(yīng)用對應(yīng)的進程ID
1、輸入top命令 然后顯示當(dāng)前系統(tǒng)的整體負(fù)載情況,
2、鍵入m 查看內(nèi)存使用情況
線上服務(wù)器資源情況
3、查到指定的進程編號,如上圖服務(wù)器tomcat進程25085
4、執(zhí)行如下命令: jmap -histo:live 25085 | head -20 查看進程中占用資源最大的前20個對象
這是個人服務(wù)器的一個對象查看結(jié)果
5、上圖為演示命令結(jié)果,非線上服務(wù)器信息(線上信息會有敏感信息)
6、從這20個對象中進行分析,一般情況有問題時,這里會有自己工程內(nèi)的類的大對象,第四列為類名。如果這都無法定位就只能執(zhí)行dump,將內(nèi)存快照保存下來用eclipse的MAT工具進行詳細(xì)分析了
7、知道哪個對象消耗內(nèi)存了,再去定位代碼問題就不難了。
原文地址:http://www.toutiao.com/i6466897103623815694/