起因:最近在跟蹤產(chǎn)品的性能問題,期間主要問題體現(xiàn)在JVM的內(nèi)存回收問題,使用MAT工具進行JVM內(nèi)存分析(也可對android 的應用內(nèi)存分析)
問題描述:
1、部分后端服務在運行一段時間后會突然年老代會變?yōu)?00%
2、部分后端服務定期出現(xiàn)年輕代GC情況,耗時超過2S
問題1解決步驟:
利用jmap指令(jmap -dump:format=b,file=文件名 PID)生成內(nèi)存快照文件。文件名支持相對路徑和絕對路徑,PID指Java應用的進程ID,可通過JPS指令獲取,在有些時候該指令無法直接生成內(nèi)存快照,需要額外補充-f,原因會在稍后的文章中說明。
在官網(wǎng)下載MAT獨立包(推薦64位,并修改MemoryAnalyzer.ini文件中的-Xmx,確保其值大于你的內(nèi)存快照文件大小,否則MAT打開內(nèi)存文件會報內(nèi)存溢出),打開之前保存的內(nèi)存快照文件
打開后,直接選擇leak suspects選項(該選項表示MAT會自動幫我們分析內(nèi)存泄漏最可能的類),分析完后類比下圖(圖片來自網(wǎng)絡(luò))