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