Java数据库连接池超时的原因竟然是OutOfMemory

背景

线上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文件;解压后可以通过浏览器直接查看分析结果


image.png

题外话

关于堆外内存的一些排查思路

查看进程分配分内存块

第一列是内存块的开始地址,后面是大小

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 ]

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容