记一次线上OOM问题

首先是 jmap -dump:format=b,file= file.hprof

 

导入MAT工具

记一次线上OOM问题

定位的问题是

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却无法释放内存,恶性循环

================================

至此,一次内存泄漏分析完毕;

程序是同事撰写......已反馈