【问题标题】:Drools 5.1 memory issuesDrools 5.1 内存问题
【发布时间】:2012-02-29 11:42:32
【问题描述】:

drool 5.1 会导致内存泄漏问题吗? 我们在调用 java 代码的地方使用复杂的验证规则。 每个请求后端加载 2-3 个 drool 文件,并为每个请求创建新的知识库。

任何人都可以对此进行更多说明吗?

private void initRulesEngine() {
    kbase = KnowledgeBaseFactory.newKnowledgeBase();
    if (kbuilder != null) {
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
    }
}

public void executeRules(BaseUOW requestedUOW) {
    initRulesEngine();
    ksession = kbase.newStatefulKnowledgeSession();
    ksession.insert(requestedUOW);
    ksession.fireAllRules();
}

这是我们的 Drool 规则代码

【问题讨论】:

  • 我不记得我们在记忆方面对我们的 Drools 应用程序进行了哪些简要介绍,但有据可查的事实是知识库很重要。为什么要为每个请求创建一个新请求?通常,您在应用启动时初始化 1 KB,然后在应用的整个生命周期内重复使用它。
  • 是的,你的课程怎么样?您是否为每个请求创建一个 KBase 和一个 KSession?干杯
  • @salaboy 是的,我们正在为每个请求创建一个 KBase 和一个 KSession
  • @Perception 我们可以创建一个 KB,但是我们在管理会话时遇到了问题
  • @Vish - 您需要每个用户的知识会话是的,但每个用户都可以从相同的 KB 创建。完成后不要忘记清理和处置会话,以避免泄漏的可能性。

标签: java memory-leaks drools


【解决方案1】:

我做了很多分析,并没有在 Drools 5.1 中发现任何内存泄漏。如果您使用有状态会话,请确保在使用它们后调用 dispose()。如果可能,也建议缓存 kbase,但按需创建它们无论如何都不会泄漏内存。

除此之外,它就像任何其他 java 应用程序一样。使用分析器找出哪些类(如果有)将您的对象实例保留在内存中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多