首先,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值。