JAVA OOM问题排查记录
文章目录
问题描述
线上的服务过段时间就会出现 oom 的错误,但是日志不太够,所以记录下整个问题的排查过程,用于后续进行借鉴。
常用命令
top
查询CPU占用情况以及进程PID
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14235 work 20 0 1550m 77m 3988 S 8.0 0.0 21226:25 instance_inspec
47449 root 39 19 1934m 207m 28m S 4.0 0.1 2957:30 webdir-agent
22546 work 20 0 1392m 232m 7256 S 2.7 0.1 33983:04 node /home/work
3752 root 39 19 802m 71m 9408 S 1.7 0.0 1458:30 baas_agent
26618 root 20 0 3779m 66m 6004 S 1.3 0.0 105:56.94 radar-agent-cli
5871 work 20 0 1283m 364m 7132 S 1.0 0.2 35418:49 node /home/work
30848 root 20 0 864m 25m 12m S 1.0 0.0 240:32.29 radar-agent-ser
2272 root 20 0 2269m 206m 7996 S 0.7 0.1 107:50.20 naming-agent
13171 root 20 0 52128 41m 2052 S 0.7 0.0 1452:10 uwsgi
13277 root 20 0 701m 6108 4360 S 0.7 0.0 429:44.24 monitor_gianod.
3588 root 20 0 700m 5924 4336 S 0.3 0.0 242:46.84 monitor_baas_ag
7764 root 20 0 957m 38m 9292 S 0.3 0.0 4607:52 agent.hosteye
7810 root 39 19 5862m 79m 12m S 0.3 0.0 757:45.74 argus-agent
8303 root 39 19 4982m 30m 1012 S 0.3 0.0 41:15.63 noah-client
jmap -heap pid
显示Java堆详细信息,打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息
Attaching to process ID 10, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.191-b12
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 6442450944 (6144.0MB)
NewSize = 2147483648 (2048.0MB)
MaxNewSize = 2147483648 (2048.0MB)
OldSize = 4294967296 (4096.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 1989672960 (1897.5MB)
used = 637523032 (607.9893417358398MB)
free = 1352149928 (1289.5106582641602MB)
32.041599037461914% used
From Space:
capacity = 79167488 (75.5MB)
used = 21287720 (20.301551818847656MB)
free = 57879768 (55.198448181152344MB)
26.88947260774524% used
To Space:
capacity = 78643200 (75.0MB)
used = 0 (0.0MB)
free = 78643200 (75.0MB)
0.0% used
PS Old Generation
capacity = 4294967296 (4096.0MB)
used = 53744560 (51.25480651855469MB)
free = 4241222736 (4044.7451934814453MB)
1.2513380497694016% used
35830 interned Strings occupying 3985440 bytes.
jmap -histo:live pid
显示堆中对象的统计信息,其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指定了live子选项,则只计算活动的对象。
num #instances #bytes class name
----------------------------------------------
1: 313902 20147600 [C
2: 324481 7787544 java.lang.String
3: 8832 3892128 [B
4: 36272 3191936 java.lang.reflect.Method
5: 9066 2024104 [I
6: 62343 1994976 java.util.HashMap$Node
7: 62213 1990816 java.util.concurrent.ConcurrentHashMap$Node
8: 14484 1610080 java.lang.Class
9: 24598 1497704 [Ljava.lang.Object;
10: 4082 1077648 com.auto.hr.ppi.base.ppitask.domain.DO.TEmployeeDO
11: 9091 1069376 [Ljava.util.HashMap$Node;
12: 43927 1054248 java.util.Date
13: 34158 754920 [Ljava.lang.Class;
14: 15543 621720 java.util.LinkedHashMap$Entry
15: 490 515568 [Ljava.util.concurrent.ConcurrentHashMap$Node;
16: 6889 496008 java.lang.reflect.Field
17: 8731 488936 java.util.LinkedHashMap
18: 30178 482848 java.lang.Object
19: 6300 403200 com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty
20: 4756 380480 java.lang.reflect.Constructor
21: 7618 365664 java.util.HashMap
jmap -dump:format=b,file=heapdump.bin pid
生成堆转储快照dump文件
sh-4.2# jmap -dump:format=b,file=heapdump.bin 10
Dumping heap to /a-one/bin/heapdump.bin ...
Heap dump file created
sz heapdump.bin
下载导出的堆快照dump文件,导入到MAT工具中
转载自:https://www.cnblogs.com/liuzhiyue/p/14931162.html
参考链接
https://www.cnblogs.com/operationhome/p/10537018.html https://www.cnblogs.com/AloneSword/p/3821569.html
文章作者 Brook
上次更新 2022-02-18