暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一次线上OOM排查

大菜猫 2021-03-18
1447

一、问题

一个查询 服务 jvm 偶现oom,容器异常退出,过会儿自动重新拉起进程,容器不变

二、时间线

20210308 怀疑是cpu飙升导致

观察cpu出现飙升, 通过 top 命令查到进程 pid 通过 top -H -p , 看到下图

耗cpu的线程都为GC线程,排除是cpu飙升的原因

20210311 复现oom 分析dump文件

本想通过sz 将dump文件拉到本地,但太费劲了,dump文件为16G, 即使分段也十分费劲,询问基础架构同学,提供了公司的dump文件分析工具 jifa

jifa 一个可以快速将dump文件快速上传到云端,且在远端使用MAT进行解析的工具,非常好使

将dump文件上传到S3云端,再根据返回的链接,直接跳转到jifa 平台,默认弹出刚才文件从S3导入的选择,选择导入,即会从S3导入到公司 jifa 平台。

选择对应机器的dump文件,进行在线分析,加载后即可得到线上MAT分析结果

从Dominator Tree中可看到有一个线程占用了96%的内存,且是线程中的一个ArrayList 占用着几乎这96%内存,点开发现全是 DotVO实体

该ArrayList 中存在 1.4 亿 个 DotVO实体

查该问题线程的堆栈,发现停在了 AssetsSecondInfoVO.result2VO

此处的逻辑为一个时间范围的中间数据补齐


看DotVO 中的时间 竟然还有50多万s 的时间。。。

查hive表数据,确实是有很大的时长的数据,比如视频时长为28s, 但是hive表中时间数据有16亿s的。。此时做中间时间补齐,则数据量会爆炸

询问数仓同学,是脏数据,是个已知问题

fix: 添加对下游数据正确性的校验逻辑 & 数仓同学推动上报源改造


文章转载自大菜猫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论