一、现象描述
公司在xx项目的单点登录服务器内存持续升高,无法回收,造成内存溢出
二、问题分析
(1). 生成dump文件
- ps aux | grep cas 查询单点登录服务器进程ID
- jmap -dump:live,format=b,file=cas.bin 进程ID
(2). 内存分析工具(MAT)进行分析
1. 查看概览视图
可以看到javax.crypto.JceSecurity 占用了全部内存(1.9GB)的90%左右
2. Dominator Tree视图
Shallow heap & Retained heap概念详解
- Shallow Size 对象自身占用的内存大小,不包括它引用的对象。 针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。 针对数组类型的对象,它的大小是数组元素对象的大小总和。
- Retained Size Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用) 换句话说,Retained Size就是当前对象被GC后,从Heap上总共