【问题标题】:Esper is not defrencing objects and leading to oom for aggregated objectsEsper 没有保护对象并导致聚合对象 oom
【发布时间】:2019-07-15 09:49:19
【问题描述】:

我们是 Esper 来聚合,即对某些事件集进行分组...但 esper 不会取消引用该聚合对象。

Esper 查询:

  private static final String HOURLY_CONTEXT =
  "create context HourlyRollup start(0,*,*,*,*,0) end(59,*,*,*,*,59)";

这是我们每小时的上下文...

查询中的这个 bean 没有被取消引用,我们正在获取这些对象的 gbs。

  private static final String HOURLY_STATEMENT =
      "context HourlyRollup "
          + "select count(*) as xcount, hourlyFloor(min(from_time)), a, b, c, d, e, f,"
          + "g,h,sum(h),sum(i),j,k,l,"
          + "m,n,y,o,p,q,r "
          + "from io.common.Bean where Dir in (-5,-3,0,1) "
          + "group by a,b,c,d,e,f,g,Direction,h,"
          + "i,j,k,l,m,l,n,o,p output all "
          + "when terminated order by a,b,c,Dir,d,e";
  private static final int HOURLY = RollupPeriod.HOURLY.ordinal();

【问题讨论】:

    标签: events out-of-memory dereference esper


    【解决方案1】:

    当一个 select 子句选择每个事件的属性时,它不在 group-by 子句中,这意味着 Esper 不会忘记事件本身并保留事件直到输出和终止。
    此类查询为http://esper.espertech.com/release-8.2.0/reference-esper/html_single/index.html#processingmodel_aggregation_batch_group_agg

    当 select 子句仅具有聚合属性以及出现在 group-by 子句中的未聚合属性时,这意味着 Esper 可以忘记事件并保留聚合值。 此类查询为http://esper.espertech.com/release-8.2.0/reference-esper/html_single/index.html#processingmodel_aggregation_batch_full_agg

    所以...检查 select 子句中的表达式,并确保事件属性要么在 group-by 子句中,要么全部聚合,例如“last(r)”或“first(r)”或类似。

    【讨论】:

    • 谢谢...我介绍了输出速率限制器
    • 在引入输出速率限制器之后......如果输入数据未聚合,我仍然会运行到 oom。如果数据超过任何大小,我想刷新数据。
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 2011-10-13
    • 2011-02-07
    • 2011-05-14
    • 2015-05-24
    • 2015-10-29
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多