我们正在使用Drools 6.4.0.Final(但尝试过7.12.0.Final具有相同的结果)作为我们的规则引擎,并且注意到第一次调用KieSession.execute与任何响应时的响应时间差异很大。后续执行,即200-300ms与之后的<1ms。
我们通过预先构建和加载知识库并每次规则调用仅创建无状态会话来加载启动时的所有规则。如建议here所述,我在规则启动过程中添加了对kc.newStatelessKieSession()和kc.getKieBase()的调用,因此改进不大。到目前为止,我发现的唯一解决方案是使用伪输入在启动时至少执行一次规则,以便所有实际执行始终快速。
我在drools examples中查看了性能测试,发现在这里他们先调用一次规则,然后再计时实际的后续规则。这个标准是否是为了避免这种初始负载扭曲性能结果?
是否有更好的方法可以通过强制在启动时初始化规则而不是在第一次调用时进行操作来避免这种初始延迟?