Drools - 加载大量规则

时间:2013-07-30 08:06:55

标签: drools

在我的应用程序中,我将近10,000条规则加载到Drools(Drools 5.5.0.final)。但是应用程序会抛出java.lang.OutOfMemoryError Exception。我的jvm args,

-Xms1024m
-Xmx1024m

任何人都可以帮我解决这个问题。我也使用了BigMemory(http://terracotta.org/products/bigmemory),但仍然遇到了同样的错误。

提前致谢!

2 个答案:

答案 0 :(得分:2)

使用像VisualVM这样的探查器(免费且非常容易运行)来查看内存随时间变化的情况,并在它出现OutOfMemory之前获取堆快照。

特别是那个图表可以告诉你一些有趣的事情(通过在你的代码中添加一些Thread.sleep),这可以给你和我们一个线索是什么导致它:

  • 在开始任何事务之前消耗了多少内存(因此只需将数据集放在内存中)
  • 内存规则占用多少内存(知识库)
  • 内存如何演变,你从该基地开始一个drools会话并插入你的数据集。

答案 1 :(得分:0)

每次重复使用相同的“statefulKnowledgeSession”进行触发时,可能会发生这种情况。在这种情况下,每个statefulKnowledgeSession.insert(fact)新事实被插入但不删除流行事实。这是你的情况,请在使用以下方法触发新的processinsatance之前删除/收回先前插入的事实:

`ksession.retract(factHandle);