1

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

-Xms1024m
-Xmx1024m

谁能帮我解决这个问题。我也使用了 BigMemory ( http://terracotta.org/products/bigmemory ) 但仍然遇到同样的错误。

提前致谢 !

4

2 回答 2

2

使用 VisualVM 之类的分析器(免费且非常易于运行)来查看内存随时间变化的图表,并在内存耗尽之前拍摄堆快照。

尤其是该图可以告诉您一些有趣的事情(通过Thread.sleep在您的代码中添加一些 's),这可以为您和我们提供线索是什么导致它:

  • 在开始任何事情之前你消耗了多少内存流口水(所以只需将数据集放在内存中)
  • 内存中有规则消耗多少内存(所以知识库)
  • 一旦你从那个基础开始一个drools会话并插入你的数据集,内存是如何演变的。
于 2013-07-30T08:32:51.287 回答
0

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

`ksession.retract(factHandle);
于 2013-08-20T09:16:13.513 回答