GHGL项目-RSA加解密导致内存泄漏
Posted 小崔编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GHGL项目-RSA加解密导致内存泄漏相关的知识,希望对你有一定的参考价值。
描述:JVM最大堆内存是默认(即32G),在做登录压测的时候,在到200并发的时候,tomcat崩了,查看日志的时候发现堆内存竟然满值,总有那么一些值不能释放,查询哪些类没有被释放,发现没有被释放的,见下图:![](https://image.cha138.com/20230217/a6c06a6a984744a28d80e57e80d877de.jpg)
是java.util.HashTablesEntry和java.security.Provider.ServiceKey这两个类竟然占用了80%左右内存,一眼就看出了是加解密的问题,上网查看加解密导致内存泄漏的问题的时候,正好有原因和解决方法。 网上链接地址:http://www.jianshu.com/p/b67bb91530b5 原因是加解密的工具类中有一个静态资源总是在增加一个new对象,而且无法释放,最后导致堆内存满值, 那段代码是:
![](https://image.cha138.com/20230217/97632bc62106464f8d736c06011bb48b.jpg)
这个RSA加解密经常用到, 解决办法是: private static BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider(); Cipher cipher = Cipher.getInstance("RSA",bouncyCastleProvider); 这样就OK, 看一下一直增加新对象不释放的过程: 1、
![](https://image.cha138.com/20230217/17a44adec45745d1b39d9c31270468c6.jpg)
2、
![](https://image.cha138.com/20230217/b67e012c77ea4cc29bf07bdff59a7a76.jpg)
3、
![](https://image.cha138.com/20230217/684fc784536f41c4bf0699d1dbd9f707.jpg)
4、
![](https://image.cha138.com/20230217/7feecc3eeba748bdb07a9c0a8398cf53.jpg)
在此感谢亮亮、波波等大神的帮忙。
以上是关于GHGL项目-RSA加解密导致内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
OpenSSL中关于RSA_new和RSA_free的内存泄漏