現(xiàn)象:restTemplate大量下載圖片 -> 內(nèi)存占用持續(xù)上升達(dá)到最大堆內(nèi)存 -> jstat -gcutil 4382 1000 發(fā)現(xiàn)應(yīng)用 持續(xù)fullGC無法降低內(nèi)存占用,cpu占用上升至100%
分析: jps -> jmap -histo:live pid | head -10 -> 發(fā)現(xiàn)最大占用為char[] -> 本地模擬使用jprofiler查看allocation tree發(fā)現(xiàn)存活的char[]多由cat攔截器分配
結(jié)論:由于restTemplate配置了cat監(jiān)控?cái)r截器熬丧,導(dǎo)致通過restTemplate下載的圖片數(shù)據(jù)會發(fā)送至cat服務(wù)器,這個(gè)過程堆積導(dǎo)致圖片數(shù)據(jù)持續(xù)駐留在內(nèi)存并且無法被GC
解決:單獨(dú)寫圖片下載的代碼 不使用之前的restTemplate