首先是 jmap -dump:format=b,file= file.hprof
导入MAT工具
定位的问题是
StandardManager和StandardSession
查看源码发现ConcurrentHashMap NODE就是StandardManager的session属性
protected Map<String, Session> sessions = new ConcurrentHashMap<>();
也就是sessions建立的过多;MAT建立了5万多的session
其中每个session的
attributes属性默认又建立一个16大小的ConcurrentHashMap存储应用程序信息
在项目中也就是存储用户信息,每个用户信息大概4KB
最终导致建立了大概400M的内存,导致内存泄漏;
PallaGC频繁GC却无法释放内存,恶性循环
================================
至此,一次内存泄漏分析完毕;
程序是同事撰写......已反馈