我是指标的新手,我不明白为什么我得到这个输出请有人解释。提前致谢。
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活动/秒
答案 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秒是没有价值的。