记录一次线上OOM的排查

周一刚坐上工位半小时就在群里收到了,服务请求不到的问题
看了一下还好不是核心业务
于是便打开k8s 进入到具体容器当中

jstat -gcutil xxx 

JVM看到Eden 和 Old区全部满了

 jmap -dump:format=b,file=/xxx/xxx 17

导出文件到服务器,然后执行重启,恢复服务

然后使用jvisualvm解析dump文件
看到居然有这么多的Long类型,定位到具体的类,就是下面的ExcepitonExpress
在这里插入图片描述
然后在项目中全局查找ExecptionExpress
解释一下具体的业务
就是收集异常快递,然后启动一个单线程去推送消息
一开始我觉得是消费堆积了,开多几个线程就完事了,后面我用arthas一抓

在这里插入图片描述
好家伙怎么抓不到啊
后面详细看了一下代码,消费者那边是这样的
在这里插入图片描述
batchUpdate方法也全部用trycatch了也不会出现《消费者中断的问题吧》

但是结合了arthas抓不到的问题,我再看看最后一次消费的日志是什么样的
在这里插入图片描述
好家伙一看不知道,一看吓一跳,这是初始化方法没找到啊!
这段代码难道是被人动过吗?
再看看代码结果发现最新的变动还是2年前。
于是我开始去看看对应的lib包,以为是jar包被人变动了
在这里插入图片描述
看到了这边有好多个相同的common包,结合异常出现的日期Jul 23日
common包有0.01和1.0.0另两个版本。
后面看了一下这两个common包的初始化方法不一样,存在lib包下,tomcat会加载最近的一个jar包,于是就先加载了旧的0.0.1版本

临时解决方案
升级exception为throwable 重新发布解决啦~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值