【问题标题】:How to check and release the memory occupied by DolphinDB stream engine?如何查看和释放 DolphinDB 流引擎占用的内存?
【发布时间】:2021-12-29 09:53:30
【问题描述】:

我已经退订了DolphinDB中的一个表,但是当我执行函数getStreamEngineStat().AsofJoinEngine时,仍然有内存被引擎占用。

函数是否返回流引擎上的实时内存信息?如何查看当前内存状态并释放内存?

【问题讨论】:

    标签: memory dolphindb


    【解决方案1】:

    getStreamEngineStat().AsofJoinEngine 确实会返回实时内存信息。

    取消定义订阅并不等同于删除引擎。在你的情况下,如果你想释放引擎占用的内存,你需要先使用dropStreamEngine并将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.release the specified engine
    ajEngine = NULL          // 2. Release the engine handler from memory
    

    如果在订阅中发现asofjoin引擎的内存过大,也可以指定参数garbageSize来清理不再需要的历史数据。 garbageSize 的大小需要根据具体情况来设置,大致根据每个 key 每小时会有多少条记录来设置。

    原理是:首先为key设置garbageSize,即清理每个key group内的数据。如果garbageSize太小,频繁清理历史数据会带来不必要的开销;如果garbageSize过大,可能达不到garbageSize的阈值,无法触发清理,导致遗留不需要的历史数据。

    因此,建议每小时清理一次,并粗略估计设置garbageSize。

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 2012-08-13
      • 1970-01-01
      相关资源
      最近更新 更多