通过jmap分析内存泄漏

jmap -histo:live pid

首先应该明确的是,jmap命令只能为内存泄漏提供一些线索和依据,但是不能确切的排查出代码中哪一行真正的出现了问题。

举个例子:一个池子有1000L的容量,前面的800L红色的水一直没有问题,这时向其中倒入了201L蓝色的水,池子里面的水溢出了,我能确切的说是这800L红色的水的问题导致的吗?我能确切的说是这201L蓝色的水导致的吗?只能说怀疑是800L的问题然后去看。

通过jmap能够帮我们排查问题提供一些依据,让我们对于排查问题更加的有迹可循

下面看下通过简单的Demo寻找问题的例子

image.png

image.png

image.pngimage.png

通过上图,我在不同的时刻执行了jmap命令,可以看到instances是一直在不停的上升的,这样我们怀疑,会不会是com.nanjing.NanJing28Suo这个类创建了过多的实例,而没有被释放导致的内存溢出呢?这时候就需要到代码中寻找,哪里进行了实例化这个类。

image.png

通过idea的抖索功能等找到类实例化的地方,可以看到我这里就是在LIst中不停的添加NanJing28Suo这个实例,因为list中持有这些个NanJing28Suo的引用,而代码执行结束的时候也没有对该l

【java】jmap -histo pid 输出的[B 占用很高,请问问题会在哪里?

04-26

公司目前的程序是解析excel表格内容,使用到了poi sax方式解析,但是在监控的过程中发现堆内存B的占用非常高,使用mat工具也告诉B可能存在内存泄漏问题。 代码中那些操作会导致这个问题呢?代码中只使用了一个inputstream来保存文件,而且使用后也关闭了 是在找不到,但是B占了相当多的空间 b就是byte数据(下面这个不是我的图,是我找的一个例图,就是B那个地方,我这里显示的是占用最高的,我不知道我的程序哪里写错了会导致这种情况) ``` num #instances #bytes class name ---------------------------------------------- 1: 1169837 131659368 [C 2: 25945 38337824 [I 3: 31548 29407968 [B 4: 1164546 27949104 java.lang.String 6: 91313 12829072 <constMethodKlass> 7: 12395 12404880 [S 8: 91313 11700288 <methodKlass> 9: 7525 9303112 <constantPoolKlass> 10: 7525 5606808 <instanceKlassKlass> 11: 6043 5028288 <constantPoolCacheKlass> 12: 10048 2007888 [Ljava.lang.Object; 14: 3507 1707048 <methodDataKlass> 15: 8132 980616 java.lang.Class 16: 26854 859328 java.util.HashMap$Entry 17: 12368 699296 [[I 18: 14135 452320 java.util.concurrent.ConcurrentHashMap$HashEntry 19: 20883 334128 java.lang.Object 20: 590 316240 <objArrayKlassKlass> 21: 1757 305904 [Ljava.util.HashMap$Entry; 22: 2809 224720 net.sf.ehcache.Element 23: 1992 223104 java.net.SocksSocketImpl 24: 2668 213440 java.lang.reflect.Method 26: 5932 183928 [Ljava.lang.String; 27: 7588 182112 java.util.concurrent.ConcurrentSkipListMap$Node 28: 7317 175608 java.lang.Long 29: 5303 169696 java.util.Hashtable$Entry 30: 6778 162672 java.util.ArrayList 31: 3931 157240 java.lang.ref.SoftReference 32: 2972 118880 java.util.LinkedHashMap$Entry 33: 1565 112680 org.apache.commons.pool2.impl.DefaultPooledObject 34: 2817 112680 net.sf.ehcache.store.chm.SelectableConcurrentHashMap$HashEntry 35: 2243 107664 java.util.HashMap 36: 2592 103680 java.util.TreeMap$Entry 37: 3214 102848 java.lang.ref.WeakReference 38: 1565 100160 redis.clients.jedis.Client 39: 4155 99720 java.util.LinkedList$Node 40: 1986 95328 java.net.SocketInputStream 41: 414 92952 [Ljava.util.concurrent.ConcurrentHashMap$HashEntry; 42: 2275 91000 java.lang.ref.Finalizer 43: 1161 83592 java.lang.reflect.Constructor 44: 757 78728 java.io.ObjectStreamClass 45: 1587 76176 java.net.SocketOutputStream 46: 1189 66584 java.beans.MethodDescriptor 47: 2770 66480 org.apache.commons.pool2.impl.LinkedBlockingDeque$Node 48: 388 66368 [Ljava.util.Hashtable$Entry; 49: 1989 63648 java.net.Socket 50: 749 53928 java.lang.reflect.Field ... ... 2947: 1 16 sun.misc.Launcher 2948: 1 16 org.codehaus.jackson.map.ser.std.DateSerializer 2949: 1 16 org.apache.phoenix.schema.types.PDataType$2 2950: 1 16 org.springframework.data.redis.connection.convert.StringToRedisClientInfoConverter Total 3090439 316004152 ``` 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览

应支付9.90元
点击重新获取
扫码支付

支付成功即可阅读