一次项目上内存溢出分析实践(javax.crypto.JceSecurity)

本文记录了一次由于javax.crypto.JceSecurity导致的内存溢出问题的分析过程,详细介绍了如何使用MAT工具进行内存分析,发现大量BouncyCastleProvider实例无法回收,原因是静态字段verificationResults的填充。通过调用链分析,定位到自定义的DesHelper类,提出了优化建议和解决方案。
摘要由CSDN通过智能技术生成

一、现象描述

公司在xx项目的单点登录服务器内存持续升高,无法回收,造成内存溢出

二、问题分析

(1). 生成dump文件

  1. ps aux | grep cas 查询单点登录服务器进程ID
  2. 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上总共
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值