Spring boot内存溢出分析

客户使用的项目突然不能用了,查看日志显示OutOfMemoryError:Java heap space

然后后面跟着一堆,看着自己写的代码部分,没找出问题所在

只能老老实实跟着步骤来:

1.先看下普通的

jmap -histo:live pid >log.log

看下能不能直接找到问题所在,好吧没有有效信息,继续

2.生成内存快照 dump

jmap -dump:live,format=b,file=dump.hprof 你的pid

3.安装JProfiler分析dump

附上下载链接:链接:https://pan.baidu.com/s/1lh2TL9F1kPcG1sKgJApbMQ 提取码:t15c

 (1)解压先安装exe(2)打开KeyGen 运行

安装的时候用户名对应填写userId 就行,公司随便写

安装好后直接双击之前生成的dump.hprof 

等待时间比较长,不要点任何取消或者跳过,加载完后会出现下面界面

到这里你就可以查看指定的类,对象等

查看的方法都是对着要查看的项右键

就会出现你选中的使用的地方,当然也可以直接选中大对象

像我这里一目了然就发现第一个的使用内存异常,如果是自己写的可以点进去查看具体信息

因为这个包是javax的,百度查看这个发现结果是在使用

BouncyCastleProvider对象时,频繁调用,未被回收造成的问题

查看源码:
每一次new BouncyCastleProvider() 在源码缓存这个对象使用的是IdentityHashMap 虽然每次的hashcode得出的值都是相同的,但是由于IdentityHashMap在判断key相同时使用的是==,于是乎每次new创建的对象都是不同的,不断的往map里面堆放

解决方法使用静态字段方式复用对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值