查看 java heapspace_Java heap space 问题查找

本文介绍了在项目运行中遇到的Java OutOfMemoryError: Java heap space问题,通过使用Memory Analyzer工具分析dump文件,发现问题是由于JceSecurity的verificationResults属性中的BouncyCastleProvider不断增加导致的。BouncyCastleProvider每次创建时hashCode相同,但IdentityHashMap使用'=='而非'equals'判断键的唯一性,导致内存泄漏。解决方案是将BouncyCastleProvider设置为单例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目开发上线的过程中,最近发现一个Dubbo服务隔7天左右就会出现以下问题:

Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space

(一开始使用findBugs进行扫描,并未扫描出可用结果)

首先,介绍一个免费开源分析dump的软件Memory Analyzer,下载地址如下所示:(同事介绍)

ps aux | grep xxx 查询进程ID

jmap -dump:live,format=b,file=文件名.bin   进程ID

可将生成的dump文件下载到本地,使用Memory Analyzer打开其文件进行分析。

最好在进程刚刚开启时就生成一个dump文件,在服务使用一段时间后再生成一个dump文件,两个文件进行对比排除内存漏洞问题。

经过排查发现漏洞问题如下所示:

b43b73bc8960219c6bc47129023c9927.png

发现问题出现在了JceSecurity的verificationResults 属性上,在verificationResults 属性中存在了过多的BouncyCastleProvider,随着应用的使用正在不断的增多,未被GC回收。

对javax.crypto.JceSecurity进行反编译查看代码发现verificationResults 是static 类属性,GC不会自动对其永久代进行回收。

对项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值