You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools应用JoinNodeLeftTuple内存占用过高问题及优化咨询

Drools应用内存占用过高问题咨询

我正在开发基于Drools的应用,目前遇到内存占用过高问题,堆中存在大量JoinNodeLeftTuple对象,且其数量随目标事件数增长而剧增:例如5000个事件对应约250万个该对象,10000个事件则跃升至3100万个。

涉及规则示例

rule "Attack 50113 - Level 5 - ID 4"
when
    $scenario: Scenario(sid == 50113, rid == 3)
    $prevLevel: Attack() from $scenario.lastAttack
    Number(this >= 4000) from accumulate(
              $a : RequestEvent(sourceIp == $scenario.getAttack(0).sourceIp, pluginId == 4003, pluginSid == 1, this after[1ms, 86400s] $prevLevel),
              count($a)
    )

    $clock: PseudoClockScheduler()
then
    ...
end

排查情况

此前我曾将累积的RequestEvent存入ArrayList并保存到新创建的Attack对象中,移除该操作后垃圾回收未受明显影响。通过Eclipse Memory Analyzer分析堆转储后,确认这些元组对象的sink为accumulate节点,初步判断accumulate节点是问题根源。

疑问

  • 规则中带时间窗口的accumulate是否是JoinNodeLeftTuple内存占用过高的原因?
  • 是否有更内存高效的事件计数方式,可避免生成大量JoinNodeLeftTuple对象?

补充说明

已搭建含5000条日志的示例仓库,用于复现该问题。

内容的提问来源于stack exchange,提问作者yuriz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:07:09