【龙叔运维问题排查记录】java线程泄露引起OOM导致JVM Crash

就在一个风平浪静的周末,一阵手机铃声惊醒了惬意的寂静,作为运维的我,心里一凉,是的,系统告警了

一个系统出现服务实例可用性告警,很快,80多个实例就剩下20多个了

 

运维处理故障的第一要素就是先恢复,保留能保留的线索,于是先重启了进程消失的系统实例,立刻对还没挂的实例打了线程dump

 

重启后的实例没有再次出现异常,接下来就是找原因了

 

现象

进程挂了的实例  最后面都打印了下面的日志,可以看出是oom了,但是又是什么原因导致的内存不足的呢

 

然后又看了系统监控图,发现某个版本之后,线程数量就是持续递增的(第二次发版重启后降了下来,然后到现在因为没有版本,就再没有重启过,直到现在出现问题),所以可以确定是线程泄露了

 

 

排查

 

 

这里定位是比较快的,寿险看crash的实例最后打印的致命错误日志(hs_errpidXXX.log),可以看到里面是由大量的inetutils对象,基本就可以确定和inetutils类有关

 

接着我们再看看之前打的therad dump内容。对其进行统计分析,可以看到inetutils对象相关的线程多达9万多个,这就很明显是inetutils的问题了,就可以直接找开发确认inetutils代码的问题了

 

原因

最后核实到 是有个任务没分钟会创建一个inetutils对象,而inetutils对象在构造的时候就会创建一个守护线程,并且没有主动回收线程,所以自从启动之后,就每分钟创建一个线程,直到内存耗尽OOM,导致crash

开发也是最后优化了代码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙叔运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值