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