一次kettle内存泄漏排查与解决

对内存dump进行分析:

在这里插入图片描述
[Full GC (Ergonomics) [PSYoungGen: 108461K->0K(2247168K)] [ParOldGen: 4737211K->3868172K(4779008K)] 4845673K->3868172K(7026176K), [Metaspace: 116691K->114102K(1165312K)], 1.2683131 secs] [Times: user=11.14 sys=3.38, real=1.26 secs]
查看carte日志,有不少error,怀疑是不是异常发生后未进行资源释放?
查询dump文件的大对象:
在这里插入图片描述

占据大量空间的属于pentaho的存储对象ServiceMap
找到问题定位点:
stack org.pentaho.osgi.blueprint.collection.utils.ServiceMap itemAdded 查找调用堆栈
查找包 org.pentaho.osgi.metastore.locator.api.impl.MetastoreLocatorImpl
修改代码,在Trans.java中的

public void execute( String[] arguments ) throws KettleException {
    prepareExecution( arguments );
    startThreads();
  }

添加代码处理:

  public void execute(String[] arguments) throws KettleException {
        try {
            this.prepareExecution(arguments);
        }
        catch (KettleException e) {
            System.out.print("------------------初始化转换失败,手动释放内存");
            this.transMeta.disposeEmbeddedMetastoreProvider();
            throw e;
        }
        this.startThreads();
    }

观察现象:
配置堆内存7g,半个小时内稳定在oldgen33%
跟踪日志12h,发生5次fullgc,内存正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值