Drools 7 JMX Mbean 及Metric 分析

Mbean

mbean的打开很简单,使用jmx启动参数:

java 复制代码
 -Dcom.sun.management.jmxremote.port=9999 
 -Ddrools.mbeans=enabled   
 -Dcom.sun.management.jmxremote.authenticate=false    
 -Dcom.sun.management.jmxremote.ssl=false  

但通过jconsole能直观看到的东西也很少

在这里插入图片描述

如果有必要,需要使用代码进一步自行分析,以下是7支持的mbean

Metric

Metric 在doc里面提的很少,几个关键点

  • 输出只能在log 和micrometer 二选一
  • 只有时间超过threshold才记录
  • 只有部分操作记录

输出2选1,及threshold都在以下metric核心类的如下代码中

java 复制代码
 public void logAndEndMetrics() {
        if (this.enabled) {
            NodeStats stats = (NodeStats)this.nodeStats.get();
            if (stats != null && stats.isStarted()) {
                long evalCount = stats.getEvalCount();
                long elapsedTimeInNanos = System.nanoTime() - stats.getStartTime();
                long elapsedTimeInMicro = elapsedTimeInNanos / 1000L;
                if (evalCount > 0L && elapsedTimeInMicro > (long)this.threshold) {
                    if (this.micrometerAvailable) {
                        MicrometerUtils.INSTANCE.triggerMicrometer(stats.getNode(), evalCount, elapsedTimeInNanos);
                    } else {
                        logger.trace("{}, evalCount:{}, elapsedMicro:{}", new Object[]{stats.getNode(), evalCount, elapsedTimeInMicro});
                    }
                }
            } else {
                logger.warn("nodeStats has to be initialized. Call startMetrics() beforehand : stats = {}", stats);
            }

            this.nodeStats.remove();
        }

    }
 

只有部分操作记录 其实也和上述代码的evalCount 必须大于0有关,以下面的drl 为例:

java 复制代码
rule "Always Stateless World"
    dialect "java"
    when
        m : Message( status >-1 )
        if (  m.getStatus()>2  ) do[giveDiscount]
    then
        System.out.println( "Always  Stateless message" );
         Thread.sleep(2000);
    then[giveDiscount]
          System.out.println( "  do---- "  );
end

rule "Stateless Hello World"
    dialect "mvel"
    when
        m : Message( status == Message.HELLO, message : message )

    then
        System.out.println( message );

//        modify ( m ) { setMessage( "Goodbyte Stateless cruel world" ),
//                       setStatus( Message.GOODBYE ) };
    modify ( m ) { message = "Goodbye cruel world",
                   status = Message.GOODBYE };
    Thread.sleep(1000);
end

只有如下仅仅ConditionalBranchNode的输出:

powershell 复制代码
 15:08:56.014 [main] TRACE o.drools.metric.util.MetricLogUtils.logAndEndMetrics:94 - [ConditionalBranchNode: cond=if ( org.drools.examples.helloStateLess.Rule_Always_Stateless_World278963341Eval0Invoker@d53a879c ) do[[RuleTerminalNode(6): rule=Always Stateless World, consequence=giveDiscount]]], evalCount:1, elapsedMicro:175
Always  Stateless message
Stateless Goodbye cruel world
status=1,Goodbye cruel world

搜索代码incrementEvalCount调用和查看继承关系,大致是如下

会进行记录。

相关推荐
专注仿真10 天前
TRAE Work 的实战
数据库·人工智能·分析
StarRocks_labs12 天前
从 6000+ Commit 中识别升级风险:一个 StarRocks AI 升级扫描工具的实现
starrocks·ai·commit·分析·claude code
七夜zippoe17 天前
基于 DolphinDB 2.x 的系统性能调优实战:从监控、分析到优化验证的全链路指南
性能调优·监控·分析·dolphindb·优化验证
不积跬步无以至千里17 天前
服务器端性能测试判断磁盘瓶颈的方法
磁盘·监控·性能·分析·lsblk·iostat·瓶颈
汤姆yu1 个月前
基于python大数据的高校舆情监测系统的设计与实现
大数据·开发语言·python·分享·分析·舆情
七夜zippoe3 个月前
DolphinDB横截面引擎:实时统计分析
分析·引擎·dolphindb·实时统计
SL-staff3 个月前
规则引擎技术选型指南:从开源Drools到企业级方案,架构演进与私有化实践
架构·开源·私有化部署·架构设计·规则引擎·drools·jvs-rules
DreamLife☼3 个月前
OpenBCI-硬件选型:Cyton vs Ganglion对比分析
硬件·分析·选型·对比·openbci·cyton·ganglion
handler013 个月前
【MySQL】教你库与表的增删查改操作(基础)
运维·数据库·笔记·sql·mysql·数据·分析
青云交5 个月前
Java 大视界 -- Java 大数据在智能医疗临床路径优化与医疗资源合理利用中的应用(424)
java·drools·spark streaming·智能医疗·apache camel·医疗资源调度·临床路径优化