美文网首页
一个堆OOM典型问题定位过程

一个堆OOM典型问题定位过程

作者: 摆渡时光 | 来源:发表于2020-03-17 22:43 被阅读0次

一 发现问题

1、最近预发机器发生了一次莫名其妙的内存溢出,可以从下图看出在下午17:19分左右开始疯狂的FGC。


image.png

2、内存的监控可以看的更明显,在17:19分old直线上升,因为之前出现过metaspace区不够的情况,一开始以为又复现这个问题,在检查相关,dump内存和metaspace保留现场证据后,18:00左右重启机器,然后内存又上去了,这个时候压力徒增。因为升级了jdk,难道和此次升级jdk有关?


image.png

但是预发环境在前一天已经部署了新版本jdk,跑了这么久,理论上不会突然出现这种问题。但是内存飙升实在太快了,看起来不像系统应用所为。在重复检查毫无头绪后,再次尝试重启,内存回归正常水平。

二 原因分析

那么这次到底是什么原因呢,毕竟马上就要发布到线上了。如果是本次升级jdk导致的,我们需要立马回滚jdk版本。

1、因为之前出现过metaspace区溢出的问题,首先分析了dump的metaspace,发现没什么异常。

2、紧接着分析dump出来的内存信息,首先从图中已经可以看到了可疑点1占用了79.8%的内存


image.png

过滤出可疑点的类org.apache.tomcat.util.threads.TaskThread


image.png

右键查看引用的old区对象


image.png

查看对象内容


image.png

可以得到关键字eveNumber。最终在代码发现了这段代码,当subStockInfoStr值是"20190801-20190901/000000-235959/10",会导致下面的while陷入死循环,不停的newJSONObject,打爆了内存。


image.png

同时线上数据里面的工单操作记录也证明是业务方操作导致,18:00服务器刚起来后,又操作了一次,导致内存又飙升,吓死哥了~


image.png

相关文章

  • 一个堆OOM典型问题定位过程

    一 发现问题 1、最近预发机器发生了一次莫名其妙的内存溢出,可以从下图看出在下午17:19分左右开始疯狂的FGC。...

  • Java服务,内存OOM问题如何快速定位

    Java服务,内存OOM问题如何快速定位 Java服务出现了OOM(Out Of Memory)问题,总结了一些相...

  • 记一次线上OOM定位过程

    最近线上的一个app 经常oom,为了定位这个问题首先先搞到oom 的dump 文件 启动参数加上 -XX:+He...

  • OOM问题分析定位

    一 、问题描述 直接上图,这个是之前在测试环境上发现的问题,导致整个服务崩了。(心里暗喜,幸亏是测试环境啊,...

  • 一分钟,教你如何迅速定位OOM

    如何迅速定位OOM 某Java服务(假设PID=10765)出现了OOM,如何快速定位? OOM常见原因分析 Ja...

  • 科普:内存泄漏与内存溢出

    最近项目中频繁出现OOM的问题,各种路径测试、内存走向分析、各种逻辑推理才最终定位到问题。在这过程中和组内的同学讨...

  • Java服务,内存OOM问题如何快速定位?

    最近一个朋友向我提问,Java服务出现了OOM(Out Of Memory)问题,该怎么做到快速定位? 某Java...

  • OOM分析之问题定位(一)

    一.问题描述 最近对系统进行压测时发现Server日志报如下错误:java.lang.OutOfMemoryErr...

  • Android 分析OOM工具介绍

    OOM问题从来都是一个让开发者闻风丧胆的大问题,它以 "难以定位,难以分析,并且它所导致的问题都很严重" 而闻名。...

  • 使用MAT解析OOM问题

    对于排查OOM问题、分析程序堆内存使用情况,最好的方式就是分析堆转储。 堆转储,包含了堆现场全貌和线程栈信息(Ja...

网友评论

      本文标题:一个堆OOM典型问题定位过程

      本文链接:https://www.haomeiwen.com/subject/zyffyhtx.html