問題
當我們的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、知道哪個對象消耗內存了,再去定位代碼問題就不難了。
閱讀更多 BeginCode 的文章