使用jmap和MAT定位内存泄漏OOM
一 使用jmap查看内存对象实例个数和内存
jmap -histo:live [pid] > xxx.log
[admin@arch036088.sqa.cm4 ~]$ jps
18270 CandidateTaskCoreLoader
18336 CandidateTaskCoreLoader
20598 Jps
15482 Bootstrap
17994 JingweiServerMain
18072 CandidateTaskCoreLoader
29470 CandidateTaskCoreLoader
[admin@arch036088.sqa.cm4 ~]$ jmap -histo:live 29470| head -n 10
num #instances #bytes class name
----------------------------------------------
1: 49988 6588800 <constMethodKlass>
2: 78378 4227032 <symbolKlass>
3: 49988 4003984 <methodKlass>
4: 4593 2357160 <constantPoolKlass>
5: 35833 2271616 [C
6: 4593 2005384 <instanceKlassKlass>
7: 8649 1503464 [B
[admin@arch036088.sqa.cm4 ~]$ jmap -histo:live 29470| head -n 20
num #instances #bytes class name
----------------------------------------------
1: 49988 6588800 <constMethodKlass>
2: 78378 4227032 <symbolKlass>
3: 49988 4003984 <methodKlass>
4: 4593 2357160 <constantPoolKlass>
5: 34296 2207784 [C
6: 4593 2005384 <instanceKlassKlass>
7: 8649 1503464 [B
8: 3901 1380112 <constantPoolCacheKlass>
9: 4540 878016 [I
10: 35296 847104 java.lang.String
11: 14051 562040 com.taobao.tddl.venus.replicator.database.Column
12: 1937 538704 <methodDataKlass>
13: 4909 471264 java.lang.Class
14: 18781 450744 java.util.HashMap$Entry
15: 6470 403808 [S
16: 6539 317968 [[I
17: 4439 316896 [Ljava.lang.Object;
二 分析dump文件
一句话 分析 heap profile 文件
1 运行应用程序(使用jre版本为1.6以上)
2 命令行执行
jmap -dump:format=b,file=d:/heap.hprof <pid>
其中d:/heap.hprof 是dump出来的内存映像发文件,可以取任何后缀的名字。
3 使用eclipse 的MAT分析d:/heap.hprof 文件,可以查看哪些对象占据大多数的内存空间。
4 个人感觉MAT最重要的是leak suspects,帮助分析出那些可疑对象:
5 获得hprof文件的其他途径:
java -Xms20M -Xmx20M -Xmn10m -XX:+UseSerialGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:PretenureSizeThreshold=3000000 -Xloggc:D:/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/test.hprof gc.SerialGCDemo
其中红色部分表示内存OOM的时刻,将内存镜像输出文件到D:/test.hprof
-XX:+HeapDumpOnOutOfMemoryError 打开选项
-XX:HeapDumpPath=d:/test.hprof 指定路径
-------------------------------------
转自:https://blog.csdn.net/arkblue/article/details/6124237?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs&dist_request_id=228c20b9-7af0-41b5-abc6-fb69a78ab1c5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs