xxljob中执行器配置错误导致的NioEventLoopGroup未被正确回收的oom分析和解决

38 篇文章 0 订阅
5 篇文章 0 订阅

一. mat内存分析

 

报告中NioEventLoop占用了1.2g的容量,大部分的堆空间

定位NioEventLoop正确的被引用位置应该为下图所示

NioEventLoopGroup正确的被引用位置为下图所示

 

但发现大量的NioEventLoopGroup没有被正确引用,却也没有回收掉

故初步定位为:NettyHttpConnectClient 下的group(io.netty.channel.nio.NioEventLoopGroup)未被正确回收

二. 排查日志

观察日志发现有大量触发器执行失败日志,原因为执行器配置ip错误

进而代码定位(通过模拟执行器无法联通的场景):

进入client.asyncSend中查看错误位置:

进入connectClient_new.init中查看错误位置,这里也是真正导致没有正确回收NioEventLoopGroup的原因:

三. 测试验证(复现问题)

本地配置一个不存在(ip对应的服务器存在,但端口不存在)的执行器,jmeter并发执行任务,约40分钟后成功复现oom问题

 

四. 解决方案

init发生异常后手动调用connectClient的close方法,close方法会释放group(NioEventLoopGroup):

方案经过4小时的压测验证,无内存溢出问题,证明问题已解决:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值