【问题标题】:Recommended settings for JBoss droolsJBoss 流口水的推荐设置
【发布时间】:2014-10-07 07:31:48
【问题描述】:

我们正在使用 drools 对大批量数据执行规则。

通过大批量数据,我的意思是我们将大量 (5000-10000) 胖物体加载到口水中。

我们观察到 JVM 堆的持续上升和规则执行开始下降。

我们是否推荐了 JVM 选项或 API 来释放工作内存。

我正在使用 statefulKnowldegeSession 并在 fireRules() 之后调用 dispose()。

【问题讨论】:

  • 通常在这种情况下,变慢的不是规则执行。相反,插入新事实所需的时间更长。需要考虑的是所有这些事实是否都是新的。你能插入一组基本事实并将它们保存在工作记忆中吗?插入/修改少量附加事实通常非常快。

标签: java performance memory-management drools jvm-arguments


【解决方案1】:

您(几乎可以肯定)体验到的只是在堆上累积大量对象的效果,而您的事实只是冰山一角。

您是否需要在工作记忆中同时包含 5k 到 10k 个事实,例如,为了建立这些事实之间的关系?如果不是,一个合理的方法是在插入 1k 个事实之后触发AllRules。 (运行基准测试以确定最佳限制。)

然后您可以调用 dispose() 并重新创建会话,这应该比手动收回所有事实更快。

了解所有 10k 个事实的循环性能也会很有趣:

h = session.insert( f );
session.fireAllRules();
session.retract( h );

始终保持相同的会话。

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多