第 90 章 与决策引擎相关的性能调优注意事项
下列关键概念或建议做法可帮助您优化决策引擎性能。这些概念在本章节中进行了概述,在适用的情况下,会详细介绍相关文档。本节将根据需要在 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