背景
线上Java进程频繁数据库链接超时
排查
GC次数和时间
/usr/lib/jvm/jdk_9.0.4/bin/jstat -gc 42925
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
0.0 352256.0 0.0 352256.0 6684672.0 1351680.0 24420352.0 21140752.9 117976.0 110809.0 12288.0 10910.8 57183 4349.786 7 435.969 4785.755
其对应的指标含义如下:
S0C 年轻代中第一个survivor的容量 (字节) -- Survivor Capacity
S1C 年轻代中第二个survivor的容量
S0U 年轻代中第一个survivor目前已使用空间 -- Survivor Used
S1U 年轻代中第二个survivor目前已使用空间
EC 年轻代中Eden的容量
EU 年轻代中Eden目前已使用空间
OC Old代的容量
OU Old代目前已使用空间
MC 方法区大小
MU 方法区目前已使用空间
CCSC 压缩类空间大小
CCSU 压缩类空间已使用大小
YGC 从应用程序启动到采样时young gc 次数
YGCT 从应用程序启动到采样时young gc 用时(s)
FGC 从应用程序启动到采样时full gc 次数
FGCT 从应用程序启动到采样时full gc 用时
GCT 从应用程序启动到采样时young+fulll gc总用时
查看日志
zcat java-2025-01-14-*|grep 'OutOfMemo'
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
Caused by: java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
Dump堆内存,jcmd
会引起一次fullGC,导致Stop The World
/usr/lib/jvm/jdk_9.0.4/bin/jcmd 42925 GC.heap_dump heapdump.hprof
dump出来的文件巨大,只能在服务器上MAT分析;
下载Linux版本的MAT,下载地址;
下载时候需要注意版本,最新版本对jdk版本有较高要求,对于jdk8需要下载以前的版本,1.9.0左右的
开始MAT分析
修改MemoryAnalyzer.ini文件调大-Xmx参数,否则分析时候会OOM
修改MemoryAnalyzer.ini文件在-vmargs之前增加-vm指定JDK路径:-vm /usr/lib/jvm/jdk_9.0.4/bin/
./ParseHeapDump.sh heapdump.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
指定生成3种分析报告:
- 内存泄漏可疑点
- 概览
- 内存占用TOP对象
如果遇到Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable
这类异常,可能是由于设置了DISPLAY环境变量的原因,需要unset掉,然后重新执行分析
首次分析很慢很慢,但是分析完成后会生成一系列的.index
索引文件,再次分析就会很快了;
分析完成后,会生成三个zip文件;解压后可以通过浏览器直接查看分析结果
题外话
关于堆外内存的一些排查思路
查看进程分配分内存块
第一列是内存块的开始地址,后面是大小
pmap -x 42925 | sort -n -r -k 3|more
total kB 52303476 34464456 34453308
0000000080000000 31469568 31469568 31469568 rw--- [ anon ]
00007f6b1cc00000 1105920 1105920 1105920 rw--- [ anon ]
00007f6c44000000 65536 65536 65536 rw--- [ anon ]
00007f6b70000000 65536 65536 65536 rw--- [ anon ]
00007f67b0000000 65536 65536 65536 rw--- [ anon ]
00007f67a8000000 64396 64396 64396 rw--- [ anon ]
00007f6b681ff000 63492 61508 61508 rw--- [ anon ]
00007f6af8000000 48600 48600 48600 rw--- [ anon ]
00007f6c2a310000 45568 45528 45528 rwx-- [ anon ]
00007f6b6c000000 44988 44988 44988 rw--- [ anon ]
00007f6b78000000 33232 33232 33232 rw--- [ anon ]
00007f6acc000000 31252 31252 31252 rw--- [ anon ]
00007f6ae4000000 33328 30720 30720 rw--- [ anon ]
00007f6c31729000 30656 30632 30632 rwx-- [ anon ]
00007f6ae0000000 41732 29164 29164 rw--- [ anon ]
00007f6b74000000 26832 26832 26832 rw--- [ anon ]
00007f6ac8000000 38664 26624 26624 rw--- [ anon ]
00007f6ac0000000 50412 26624 26624 rw--- [ anon ]
00007f6ad4000000 59636 25612 25612 rw--- [ anon ]
00007f6aec000000 51172 25132 25132 rw--- [ anon ]
00007f6b80000000 22988 22988 22988 rw--- [ anon ]
00007f6c28028000 22616 22616 22616 rw--- [ anon ]
00007f6a8c000000 22112 20988 20988 rw--- [ anon ]
00007f6ad0000000 51244 20676 20676 rw--- [ anon ]
00007f68a8000000 38888 20632 20632 rw--- [ anon ]
00007f6b7c000000 20088 20088 20088 rw--- [ anon ]
00007f6b88000000 18940 18940 18940 rw--- [ anon ]
00007f6adc000000 56580 18776 18776 rw--- [ anon ]
00007f6c08000000 18624 18624 18624 rw--- [ anon ]
00007f6bd8000000 17756 17756 17756 rw--- [ anon ]
00007f6ad8000000 25832 17316 17316 rw--- [ anon ]
00007f68f6f02000 17400 16476 16476 rw--- [ anon ]
00007f6b84000000 16184 16184 16184 rw--- [ anon ]
00007f6b90000000 16120 16120 16120 rw--- [ anon ]
00007f6b8c000000 15816 15816 15816 rw--- [ anon ]
00007f6bfc000000 15224 15224 15224 rw--- [ anon ]
00007f6bcc000000 14512 14512 14512 rw--- [ anon ]
00007f6bec000000 14424 14424 14424 rw--- [ anon ]
00007f684c000000 14172 14156 14156 rw--- [ anon ]
00007f6bd0000000 14104 14104 14104 rw--- [ anon ]
00007f6c24000000 14068 14068 14068 rw--- [ anon ]
00007f6b98000000 13728 13728 13728 rw--- [ anon ]
00007f6c0c000000 13644 13644 13644 rw--- [ anon ]
00007f6c20000000 13632 13632 13632 rw--- [ anon ]
00007f6be8000000 13256 13256 13256 rw--- [ anon ]
00007f6bf4000000 13164 13164 13164 rw--- [ anon ]