metrics的timer功能在java项目中的使用方法

metrics是开源的统计工具,其官网地址为:https://dropwizard.github.io/metrics/3.1.0/

使用时所需的jar包为:metrics-core-3.X.X.jar,例如:metrics-core-3.1.0.jar
在使用过程中,一般一个程序创建一个全局的MetricRegistry,由其对数据进行统计;数据统计的结果可用reporter输出,metrics支持多种类型的输出,例如使用ConsoleReporter 输出到控制台,使用Slf4jReporter将统计结果以self4j的日志方式输出(需要self4j的jar包)。
下面是其timer功能的使用方法:
功能介绍:metrics的timer功能可以统计一段代码的执行时间执行次数等
使用方法:
1.创建一个程序唯一的MetricRegistry对象
2.创建一个reporter对象来输出统计结果
3.打开reporter,让其处于数据输出的状态
4.为一段要监控的代码起一个标签名,在metrics内部将以该标签作为key来保存其统计数据;
5.为这个标签创建一个Timer.Context对象,并开始本次统计
6.调用Timer.Context对象的stop函数结束本次统计

5和6这两步算作一次统计,如果循环执行这两步就是循环统计这个标签所代表的代码

示例代码为:

MetricRegistry metrics = new MetricRegistry();
		Slf4jReporter reporter = Slf4jReporter
				.forRegistry(metrics).convertRatesTo(TimeUnit.SECONDS)
				.convertDurationsTo(TimeUnit.MILLISECONDS).build();
		//metrics数据统计工具
		int icounter = 0;
		reporter.start(20, TimeUnit.SECONDS);
		long it = System.currentTimeMillis();
		boolean start = false;
		while(true)
		{
			icounter++;
			long st = System.currentTimeMillis();
			if(st - it > 10000 && !start)
			{
				start = true;
				System.out.println("stop metrics");
				reporter.stop();
			}
			System.out.println("counter = " + icounter);
			//开始统计timer1
			Timer.Context mTimer1 = metrics.timer("timer1").time();//--------标签timer1对应的mTimer1开始计时
			
			safeSleep(100);
			
			//开始统计timer2
			Timer.Context mTimer2 = metrics.timer("timer2").time();//--------标签timer2对应的mTimer2开始计时
			
			safeSleep(100);
			
			
			
			//结束统计timer1
			mTimer1.stop();//--------标签timer1对应的mTimer1计时结束
			
			//结束统计timer2
			mTimer2.stop();//--------标签timer2对应的mTimer1计时结束
		}

其输出的结果为:

10:43:19.478 [metrics-logger-reporter-1-thread-1] INFO  metrics - type=TIMER, name=timer1, count=494, min=19.090878, max=31.171142, mean=19.985073202643935, stddev=0.9713886624598259, median=19.858742, p75=19.909125, p95=20.520245, p98=21.869995, p99=24.629206999999997, p999=31.171142, mean_rate=49.43821863514075, m1=49.199999999999996, m5=49.199999999999996, m15=49.199999999999996, rate_unit=events/second, duration_unit=milliseconds
10:43:19.488 [metrics-logger-reporter-1-thread-1] INFO  metrics - type=TIMER, name=timer2, count=495, min=9.132584, max=21.298683, mean=10.124765811511601, stddev=0.7566357585679963, median=10.036045999999999, p75=10.081762999999999, p95=10.619485, p98=11.162185, p99=13.216044, p999=21.298683, mean_rate=49.541734551687156, m1=49.4, m5=49.4, m15=49.4, rate_unit=events/second, duration_unit=milliseconds
c


你可能感兴趣的:(java,linux,java相关)