1. 程式人生 > >metrics的timer功能在java專案中的使用方法

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