现象:restTemplate大量下载图片 -> 内存占用持续上升达到最大堆内存 -> jstat -gcutil 4382 1000 发现应用 持续fullGC无法降低内存占用,cpu占用上升至100%
分析: jps -> jmap -histo:live pid | head -10 -> 发现最大占用为char[] -> 本地模拟使用jprofiler查看allocation tree发现存活的char[]多由cat拦截器分配
结论:由于restTemplate配置了cat监控拦截器,导致通过restTemplate下载的图片数据会发送至cat服务器,这个过程堆积导致图片数据持续驻留在内存并且无法被GC
解决:单独写图片下载的代码 不使用之前的restTemplate
jmap结果 jstat结果
网友评论