搜索

第 90 章 与决策引擎相关的性能调优注意事项

download PDF

下列关键概念或建议做法可帮助您优化决策引擎性能。这些概念在本章节中进行了概述,在适用的情况下,会详细介绍相关文档。本节将根据需要在 Red Hat Decision Manager 的新版本时扩展或更改。

对不需要重要决策引擎更新的无状态 KIE 会话使用顺序模式

顺序模式是决策引擎的高级规则基础配置,允许决策引擎以决策引擎日程表中列出的顺序来评估规则,而无需考虑工作内存的变化。因此,规则执行可能会以连续模式更快,但重要的更新可能不会应用到您的规则。顺序模式只适用于无状态 KIE 会话。

要启用顺序模式,请将系统属性 drools.sequential 设置为 true

有关启用顺序模式或其他选项的详情,请参考 第 84.3 节 “Phreak 中的顺序模式”

使用带有事件监听程序的简单操作

限制事件监听程序数及其执行的操作类型。将事件监听程序用于简单操作,如调试日志记录和设置属性。在监听器中,复杂的操作(如网络调用)可能会破坏规则执行。在使用 KIE 会话后,删除附加的事件监听程序以便清理会话,如下例所示:

使用后删除的事件监听程序示例

Listener listener = ...;
StatelessKnowledgeSession ksession = createSession();
try {
    ksession.insert(fact);
    ksession.fireAllRules();
    ...
} finally {
    if (session != null) {
        ksession.detachListener(listener);
        ksession.dispose();
    }
}

有关内置事件监听器以及在决策引擎中调试日志记录的详情,请参考 第 87 章 决策引擎事件监听程序和调试日志记录

为可执行模型构建配置 LambdaIntrospector 缓存大小
您可以配置 LambdaIntrospector.methodFingerprintsMap 缓存的大小,该缓存在可执行模型构建中使用。缓存的默认大小为 32。当您为缓存大小配置较小的值时,它会减少内存用量。例如,您可以将系统属性 drools.lambda.introspector.cache.size 配置为 0, 以达到最小内存使用量。请注意,较小的缓存大小也会降低构建性能。
对可执行模型使用 lambda externalization

启用 lambda 外部化,以优化运行时的内存消耗。它重写在可执行模型中生成和使用的 lambdas。这可让您多次使用相同的模式和相同的约束。当 rete 或 phreak 实例化时,可执行模型变成垃圾收集。

要为可执行模型启用 lambda 外部化,请包括以下属性:

-Ddrools.externaliseCanonicalModelLambda=true
配置 alpha 节点范围索引阈值

alpha 节点范围索引用于评估规则约束。您可以使用 drools.alphaNodeRangeIndexThreshold 系统属性配置 alpha 节点范围索引的阈值。阈值的默认值为 9,表示当预先节点包含超过 9 个 alpha 节点时启用 alpha 节点范围索引,且存在不等质量限制。例如,当您有 9 个与 Person(age > 10)Person(age > 20), …​, Person(age > 90),那么您可以有类似的 9 个 alpha 节点。

阈值的默认值为基于相关的优点和开销。但是,如果您为阈值配置较小的值,则可以根据规则提高性能。例如,您可以将 drools.alphaNodeRangeIndexThreshold 值配置为 6,在之前节点的六个 alpha 节点中启用 alpha 节点范围索引。您可以根据规则的性能测试结果,为阈值设置合适的值。

启用加入节点范围索引

只有在要加入大量事实(如 256*16 组合)时,加入的节点范围索引功能才会提高性能。当应用程序插入大量事实时,您可以启用加入节点范围索引并评估性能改进。默认情况下禁用加入节点范围索引。

kmodule.xml 文件示例

<kbase name="KBase1" betaRangeIndex="enabled">

BetaRangeIndexOption的系统属性

drools.betaNodeRangeIndexEnabled=true

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.