java - 口水融合 : measure performance

标签 java drools rule-engine complex-event-processing drools-fusion

我想根据规则的数量和规则的复杂性来衡量流口水的表现。因此,我需要测量处理事件所需的时间。我想编写一个像这样的简单测试:

long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
    insertHeartRate(150, 0, macAddress);
    ksession.fireAllRules();
}
long stop = System.currentTimeMillis();
System.out.println("Running time: " + (stop - start));

我面临的问题是这不起作用,因为您可以插入尽可能多的内容 您想要的事件和 drools 稍后会处理它们。那么这个时间点 显然,部分总是小于一秒。所以我的问题是我怎样才能 处理完所有事件后调用long stop = System.currentTimeMillis()

最佳答案

fireAllRules 在一切发生后返回。因此,您发布的代码确实会测量插入这些事件以及触发所有触发规则所用的时间。

如果您的规则启动了稍后执行的计时器:那是另一回事。此外,您正在解决 Fusion:这些事件不会根据紧密循环到达,并且时间戳和窗口:时间和时间运算符:没有任何内容会按照您的规则中的预期工作。

如果没有时间运算符或window:time,您可以先测量插入事实所需的时间,然后测量fireAllRules的持续时间。

所有这些都高度依赖于 Java 的 JIT、GC 行为和 CPU 的一些细节...

编辑查看您的代码后,我可以添加另一个建议。确保您有一个包含插入和规则执行的事件序列。要么在一个线程中运行所有内容 - inserts 和 fireAllRules,一次或重复 - 并测量前后的时间。或者,在一个线程中运行 fireUntilHalt,测量时间并插入到另一个线程中。现在,要查看最后一次插入后一切都消失的时间,您必须构建一些东西来捕捉那一刻。一种方法是插入一些特殊事实,触发显着性非常低的规则,并测量其结果的结束时间。

关于java - 口水融合 : measure performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846024/

相关文章:

java - mysql故障转移后如何用从数据库的数据更新主数据库

java - 如何让 Firebase 与 Java 后端一起工作

java - HashMap 错误 : incompatible types

java - 如何从 drools session 中检索事实?

java - 开发小型规则引擎的简单设计模式

java - Apache POI XSSFPivotTable setDefaultSubtotal

java - 发现全局预期 com.package.sameobj 的非法类 com.package.sameobj

java - Drools 决策表, "mismatched input ' >' in rule "

java - JBoss Guvnor,我可以在声明性模型中创建数组和/或映射吗?

spatial - 用于空间和时间推理的规则引擎?