Java 指标示例代码

Java Metrics Sample code

我是度量的新手,我不明白为什么我会得到这个输出请有人解释。提前致谢。

package sample;
  import com.codahale.metrics.*;
  import java.util.concurrent.TimeUnit;

  public class GetStarted {
    static final MetricRegistry metrics = new MetricRegistry();
    public static void main(String args[]) {
      startReport();
      Meter requests = metrics.meter("requests");
      requests.mark();
      wait5Seconds();
    }

  static void startReport() {
      ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics)
          .convertRatesTo(TimeUnit.SECONDS)
          .convertDurationsTo(TimeUnit.MILLISECONDS)
          .build();
      reporter.start(1, TimeUnit.SECONDS);
  }

  static void wait5Seconds() {
      try {
          Thread.sleep(5*1000);
      }
      catch(InterruptedException e) {}
  }
}

输出:

12/18/15 12:01:15 下午 ================================== =========================

-- 米 ---------------------------------------- ---------------------------- 要求 计数 = 1 平均利率 = 1.00 events/second 1 分钟汇率 = 0.00 events/second 5 分钟汇率 = 0.00 events/second 15 分钟利率 = 0.00 events/second

12/18/15 12:01:16 下午 ================================== =========================

-- 米 ---------------------------------------- ---------------------------- 要求 计数 = 1 平均比率 = 0.50 events/second 1 分钟汇率 = 0.00 events/second 5 分钟汇率 = 0.00 events/second 15 分钟利率 = 0.00 events/second

12/18/15 12:01:17 下午 ================================== =========================

-- 米 ---------------------------------------- ---------------------------- 要求 计数 = 1 平均比率 = 0.33 events/second 1 分钟汇率 = 0.00 events/second 5 分钟汇率 = 0.00 events/second 15 分钟利率 = 0.00 events/second

12/18/15 12:01:18 下午 ================================== =========================

-- 米 ---------------------------------------- ---------------------------- 要求 计数 = 1 平均比率 = 0.25 events/second 1 分钟汇率 = 0.00 events/second 5 分钟汇率 = 0.00 events/second 15 分钟利率 = 0.00 events/second

12/18/15 12:01:19下午 ================================== =========================

-- 米 ---------------------------------------- ---------------------------- 要求 计数 = 1 平均比率 = 0.20 events/second 1 分钟汇率 = 0.00 events/second 5 分钟汇率 = 0.00 events/second 15 分钟利率 = 0.00 events/second

创建注册表后,您以 1 秒的间隔启动了报告程序。所以每一秒,你的控制台报告器都会输出到控制台。

您选择了计量类型指标,它将为您提供计数(此事件发生的次数)和平均速率(平均速率)。其他速率将为零,因为该测量的单个时间单位尚未结束。例如。您 运行 该程序仅持续 5 秒,因此您不会获得 1 分钟的费率。让它运行超过1分钟就可以看到其他有一定价值的费率了。

requests.mark();

上面一行用来标记一个事件的发生。一旦触发度量事件,您就会调用它。由于您不再在程序中调用此方法,因此计数仍为 1。

平均速率是(从应用程序开始的总计数)/(从开始的总时间,以秒为单位)。注意:这里是秒。每第二个记者正在打印。当计数 = 1 时,以第 1 秒的速率 =(1 次计数)/(1 秒)。在第 2 秒速率 = (1 计数)/(2 秒)=0.5,在第 3 秒速率 = (1 计数)/(3 秒) = 0.33

1 分钟的速率是(最后 1 分钟的总计数)/(60 秒)。这里的 1 分钟速率为零,因为还没有经过 1 分钟。以下大间隔率相同

5 分钟的速率是(最后 5 分钟的总计数)/(5*60 秒)。 5 分钟 = 5*60 秒

您可能希望线程休眠,从而在日志中预计有 5 秒的间隔。但记者 运行 正在另一个线程中。所以在这里睡 5 秒除了让程序 运行 5 秒之外没有任何价值。