Esper 不是 defrencing objects 并导致聚合对象的 oom

Esper is not defrencing objects and leading to oom for aggregated objects

我们是 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();

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

当 select-clause 只有聚合属性加上出现在 group-by 子句中的 un-aggregated 属性时,这意味着 Esper 可以忘记事件并保留聚合值。 这种类型的查询是 http://esper.espertech.com/release-8.2.0/reference-esper/html_single/index.html#processingmodel_aggregation_batch_full_agg

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