Java Metrics示例代码

时间:2015-12-18 06:50:50

标签: java metrics

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

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 PM ==================================== =======================

- Meters -------------------------------------------- -------------------------- 要求              count = 1          平均速率= 1.00事件/秒      1分钟费率= 0.00事件/秒      5分钟费率= 0.00次/秒     15分钟费率= 0.00活动/秒

12/18/15 12:01:16 PM ==================================== =======================

- Meters -------------------------------------------- -------------------------- 要求              count = 1          平均速率= 0.50事件/秒      1分钟费率= 0.00事件/秒      5分钟费率= 0.00次/秒     15分钟费率= 0.00活动/秒

12/18/15 12:01:17 PM ==================================== =======================

- Meters -------------------------------------------- -------------------------- 要求              count = 1          平均速率= 0.33事件/秒      1分钟费率= 0.00事件/秒      5分钟费率= 0.00次/秒     15分钟费率= 0.00活动/秒

12/18/15 12:01:18 PM ==================================== =======================

- Meters -------------------------------------------- -------------------------- 要求              count = 1          平均速率= 0.25事件/秒      1分钟费率= 0.00事件/秒      5分钟费率= 0.00次/秒     15分钟费率= 0.00活动/秒

12/18/15 12:01:19 PM ==================================== =======================

- Meters -------------------------------------------- -------------------------- 要求              count = 1          平均速率= 0.20事件/秒      1分钟费率= 0.00事件/秒      5分钟费率= 0.00次/秒     15分钟费率= 0.00活动/秒

1 个答案:

答案 0 :(得分:3)

创建注册表后,您以1秒的间隔启动了报告者。因此,对于每一秒,您的控制台记者将输出到控制台。

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

requests.mark();

以上行用于标记事件的发生。正如您在触发指标事件时调用它一样。由于您不再在程序中调用此方法,因此计数仍为1。

平均费率是(从申请开始的总数)/(从开始的每秒的总时间)。注意:这是秒。每一秒都有记者打印。当count = 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秒是没有价值的。