JVM dump文件 内存分析

284 阅读2分钟

JVM dump文件 内存分析

一.生成dump文件步骤

1.程序启动时指定内存大小

nohup java -Xms2048m -Xmx3096m -jar app.jar > app.log &


2.假如生产环境上应用内存占用很高那么我们如何排查

[root@fk calc] top
top - 15:50:21 up 81 days,  7:03,  1 user,  load average: 0.38, 0.73, 0.86
Tasks: 688 total,   1 running, 687 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.8 sy,  0.0 ni, 98.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 52808089+total, 27655750+free, 12646478+used, 12505859+buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used. 39595475+avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
28325 tydic     20   0   43.9g  22.0g  17096 S  29.4  4.4  34654:18 java
21843 root      20   0  162772   2828   1544 R  11.8  0.0   0:00.04 top
22972 tydic     20   0   44.9g   1.6g  15972 S  11.8  0.3 696:23.84 java
37562 hdfs      20   0 4364440 679644  24676 S  11.8  0.1   1655:34 java
26600 tydic     20   0   35.5g   1.4g  15232 S   5.9  0.3  17:53.19 java
31562 root      20   0   37.7g   1.4g  14268 S   5.9  0.3 131:02.85 java
36936 hdfs      20   0 3300036 564708  24780 S   5.9  0.1 107:50.54 jsvc
44814 tydic     20   0   44.9g   1.5g  15948 S   5.9  0.3 558:34.27 java
46600 tydic     20   0   40.2g   9.2g 399580 S   5.9  1.8   5021:36 java

3.生成Java进程dump文件

jmap -dump:format=b,file=a.hprof 7962

二.分析dump文件

1. 通过eclipse mat 工具打开dump

image.png

2. 查看内存占用最高的类选择(Dominator Tree)

image.png

image.png

3.查看与业务代码相关的包 通过regex 表达式过滤 得到内存占用最大的大对象

image.png

注意 其实一般Java程序启动都设置了最大内存最小内存, 且oom 导出dump镜像

java
-Xms2048m 
-Xmx3096m 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=dumpfile.hprof 
-jar app.jar