如何释放流引擎占用的内存?StreamEngine的内存如何释放

我的订阅已经取消了,为什么用getStreamEngineStat().AsofJoinEngine 看到一直有内存占用。getStreamEngineStat().AsofJoinEngine 这个返回的实时的内存占用情况吗?

请先 登录 后评论

1 个回答

Yating Xie

首先,getStreamEngineStat().AsofJoinEngine 返回的是实时的内存占用情况。

其次,取消订阅和engine没有关系的。您这种情况,要释放引擎的话,需要以下两步:1、dropStreamEngine 2、createEngine的返回的变量=NULL。具体示例如下:

假设你定义的引擎如下:

ajEngine=createAsofJoinEngine(name="aj1", leftTable=trades, rightTable=quotes, outputTable=prevailingQuotes, metrics=<[price, bid, ask, abs(price-(bid+ask)/2)]>, matchingColumn=`sym, timeColumn=`time, useSystemTime=false, delayedTime=1)

订阅结束后,正确地释放内存操作如下:

dropStreamEngine("aj1")  // 1.释放指定的流数据引擎的定义
ajEngine = NULL          // 2.从内存中释放流数据引擎的句柄的定义


如果,是订阅中发现asofjoin引擎的内存过大,也可以通过参数garbageSize,清理不再需要的历史数据garbageSize的大小需要根据实际情况设置,大致可以按照每个小时每个key会有多少条数据设置。

原理如下:首先garbageSize是针对key的,即每个key分组内数据到了才清理。garbageSize过小,会频繁清理历史数据带来不必要的开销;garbageSize过大,可能会一直达不到garbageSize这个阈值而无法触发清理,造成asofjoin中不再需要的历史数据一直没有被清理。所以建议按照一个小时清理一次,估计一下具体情况每个小时每个key会有多少数据,来设置garbageSize值。

请先 登录 后评论