内存泄漏排查分析

首先来看下堆内存的情况:jmap -heap pid

 我们可以看到老年代的空间基本都占满了。

由于可以看到老年代空间基本都满了,所以可以想到现在程序肯定在疯狂的进行GC操作,我们执行下命令看看:jstat -gc pid 1000

 可以看出fullGC非常频繁,但是老年代的空间却并没减少,应该是发生了内存泄漏。

我们导出下dump日志看看,执行:jmap -dump:live,format=b,file=myjmapfile.hprof 31324

这里我们采用MAT工具去分析dump日志。

 

 打开工具并且导入我们的dump日志。

 通过圆饼图我们可以看到有个线程的内存占用率很高,然后里面显示的是一个数组对象很大。

 接着我们通过柱状图更直观的去看下。

可以看到是这个实体类占的很高。

 接着,我们看下线程堆栈信息。

 很明显,第一个占用最高的和我们前面饼状图提示的线程一致。所以我们点看这个线程详情看看。

这里面有很多调用链路,但是其实我们只需要找到我们自己项目的链路信息就行。 

果然,我们在这里找到了和我们前面对象一致的链路信息。接着我们只需要找到我们项目上这个文件的这个方法找到对应的位置就可以大致定位到泄露发生的地方了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值