jvm 生产环境下内存泄漏 如何定位

ahdkk 发布于 2016/09/12 12:05
阅读 910
收藏 1

最近修改了一下代码导致生产环境下每隔4到5天就会出现一次内存泄漏,

报这个错:GC overhead limit exceeded

截图如下:


这个错其实就是内存快满的一个警告,如果我在jvm参数中去掉这个警告,就会直接报oom了,所以这个禁掉没有意义。

当时查看了一下jvm的gc统计情况:如下图


dump文件太大了,MAT 打不开。


求大神指导该怎么定位这个问题。


加载中
1
-10
-10
打不开,就找个大内存的,一般这样的情况,用mat 配合使用方式 jstack 情况,都能很好的定位问题
IdleMan
IdleMan
哟哟
0
ihuotui
ihuotui

可以dump出来分析内存用mat

0
ahdkk
ahdkk

已解决,还是stackoverflow高手多,国内高手都不愿意回答,好可惜!

ahdkk
ahdkk
回复 @jspp : jdk加参数监控gc行为,然后结合dump快照,通过MAT分析,确定类之后在去分析代码,就能够不断的缩小范围最后解决它
_Mr_Right_
_Mr_Right_
分享下解决方案!
0
vikde
vikde

jmap -histo pid >> xx.txt

记住一定要程序还没挂之前就去弄,别等到都FGC不行了再去。分析一下哪个实例最多,看看代码,基本上是能分析出来的,还是代码的问题,多检查

0
Eric_林
Eric_林
jprofile 值得拥有
ahdkk
ahdkk
生产环境下不好用这个,最好的办法也是最朴素的办法就是dump然后分析
返回顶部
顶部