一次线上oom故障引发的思考

前言

首先声明qvq 这个问题其实是同事搞得,我在他的故障复盘会议上,学到了很多新东西。
我本人可没有搞出这种问题(自信 O(∩_∩)O)

问题

简言之就是容器oom了,出现了线上繁忙,部分服务响应时间过长。

排查

内存溢出了,根据这位同事的排查(查dump文件以及他最近的改动),是由于使用threadLocal变量未手动释放内存。

后来通过修复,也证明了他的猜测是正确的。
毕竟能oom的原因不多,java基本是虚拟机自动去释放内存,需要程序员手动释放内存的场景并不多。

那为什么这个问题并没有在灰度阶段暴露出来,而是在上线全量几天后才暴露呢?

这里还有个小点,就是灰度机器切换期间,docker容器销毁与重启,已经释放了堆积的内存。而在上线紧接着几天里,我们的应用陆续每天都有发布,相当于容器每天都会清空一次,所以问题就潜伏了起来。

而在问题暴露前,我们的应用刚好有个两三天没发布,其实就是docker容器内存堆积了。

收获

收获一 :什么是dump文件,为什么同事根据它查出了问题?

Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。

Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开。

当我们的程序发布出去之后,在客户机上是无法跟踪代码的,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值