Java Metric使用介绍1

Metrics是一个给JAVA提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同一时候,Metrics可以非常好的跟Ganlia、Graphite结合,方便的提供图形化接口。

以下简介下Metrics怎样使用。

Maven地址:

仅仅须要添加�metrics-core就可以使用

<dependency>

        <groupId>com.yammer.metrics</groupId>

        <artifactId>metrics-core</artifactId>

        <version>2.2.0</version>

    </dependency>

源文档 <http://metrics.codahale.com/getting-started/>

以下通过一些測试代码介绍Metrics每一个组件的使用,比較简单,基本看代码就懂了,这里不做过多介绍,请结合http://metrics.codahale.com/getting-started/介绍一起看,这里相当于完好代码。

Gauges

最简单的度量指标,每次相当于重置这个值。

package com.alibaba.cxf.test.metric;

import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.TimeUnit; import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.Counter;
import com.yammer.metrics.core.Gauge;
import com.yammer.metrics.reporting.ConsoleReporter; /**
* TODO
* @author scutshuxue.chenxf
*/
public class TestGauges {
public static Queue<String> queue = new LinkedList<String>(); public static void main(String[] args) throws InterruptedException{
ConsoleReporter.enable(5,TimeUnit.SECONDS); Gauge<Integer>g = Metrics.newGauge(TestGauges.class, "pending-jobs", newGauge<Integer>() {
@Override
public Integer value() {
return queue.size();
}
});
queue.add("ssss");
System.out.println(g.value());
while(true){
Thread.sleep(1000);
}
}
}

运行效果例如以下:

12-12-20 14:48:53==============================================================
com.alibaba.cxf.test.metric.TestGauges:
pending-jobs:
value = 1

代码中都添加�了ConsoleReporter.enable(1, TimeUnit.SECONDS);语句,通过这个命令,能够每秒钟将度量指标打印在屏幕上,理解起来会有更清楚的理解。

Counter,计数器

package com.alibaba.cxf.test.metric;

import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.TimeUnit; import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.Counter;
import com.yammer.metrics.reporting.ConsoleReporter; /**
* TODO
* @author scutshuxue.chenxf
*/
public class TestCounter { private final Counter pendingJobs = Metrics.newCounter(TestCounter.class, "pending-jobs");
private final Queue<String> queue = new LinkedList<String>(); public void add(Stringstr) {
pendingJobs.inc();
queue.offer(str);
} public String take() {
pendingJobs.dec();
return queue.poll();
}
/**
* TODO
* @author scutshuxue.chenxf
* @param args
* void
* @throws InterruptedException
*/
public static void main(String[]args) throws InterruptedException {
// TODOAuto-generated method stub
TestCounter tc =new TestCounter();
ConsoleReporter.enable(1,TimeUnit.SECONDS);
while(true){
tc.add("1");
Thread.sleep(1000);
}
} }

效果例如以下:

12-12-20 14:48:53==============================================================
com.alibaba.cxf.test.metric.TestGauges:
pending-jobs:
value = 1

Meters

Meters会将近期1分钟,5分钟,15分钟的TPS(每秒处理的request数)给打印出来,还有全部时间的TPS。

package com.alibaba.cxf.test.metric;

import java.util.concurrent.TimeUnit;

import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.Meter;
import com.yammer.metrics.reporting.ConsoleReporter; /**
* TODO
* @author scutshuxue.chenxf
*/
public class TestMeters {
private static Meter meter = Metrics.newMeter(TestMeters.class, "requests","requests", TimeUnit.SECONDS); public static void main(String[] args) throws InterruptedException{
ConsoleReporter.enable(1,TimeUnit.SECONDS);
while(true){
meter.mark();
meter.mark();
Thread.sleep(1000);
}
}
}

效果例如以下:

12-12-20 15:02:50==============================================================
com.alibaba.cxf.test.metric.TestMeters:
requests:
count = 20
mean rate = 2.20requests/s
1-minute rate = 2.00requests/s
5-minute rate = 2.00requests/s
15-minute rate = 2.00requests/s

Histograms 直方图

最大值,最小值,平均值,方差,中位值,百分比数据,如75%,90%,98%,99%的数据在哪个范围内。

package com.alibaba.cxf.test.metric;

import java.util.concurrent.TimeUnit;

import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.Histogram;
import com.yammer.metrics.reporting.ConsoleReporter; /**
* TODO
* @author scutshuxue.chenxf
*/
public class TestHistograms {
private static Histogram histo = Metrics.newHistogram(TestHistograms.class,"histo-sizes"); /**
* TODO
* @author scutshuxue.chenxf
* @param args
* void
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODOAuto-generated method stub ConsoleReporter.enable(1,TimeUnit.SECONDS);
int i=0;
while(true){
histo.update(i++);
Thread.sleep(1000);
}
} }

效果例如以下:

com.alibaba.cxf.test.metric.TestHistograms:
histo-sizes:
min = 0.00
max = 5.00
mean = 2.50
stddev = 1.87
median = 2.50
75% <= 4.25
95% <= 5.00
98% <= 5.00
99% <= 5.00
99.9% <= 5.00

Timers

时间统计

package com.alibaba.cxf.test.metric;

import java.util.Random;
import java.util.concurrent.TimeUnit; import com.yammer.metrics.Metrics;
import com.yammer.metrics.core.Timer;
import com.yammer.metrics.core.TimerContext;
import com.yammer.metrics.reporting.ConsoleReporter; /**
* TODO
* @author scutshuxue.chenxf
*/
public class TestTimers {
private static Timer timer = Metrics.newTimer(TestTimers.class, "responses", TimeUnit.MILLISECONDS,TimeUnit.SECONDS);
/**
* TODO
* @author scutshuxue.chenxf
* @param args
* void
* @throws InterruptedException
*/
public static voidmain(String[] args) throws InterruptedException {
// TODOAuto-generated method stub
ConsoleReporter.enable(2,TimeUnit.SECONDS);
Random rn = newRandom();
timer.time();
System.out.println();
while(true){
TimerContextcontext = timer.time(); Thread.sleep(rn.nextInt(1000));
context.stop();
}
} }

效果例如以下:

com.alibaba.cxf.test.metric.TestTimers:
responses:
count = 26
mean rate = 2.15calls/s
1-minute rate = 1.70calls/s
5-minute rate = 1.62calls/s
15-minute rate = 1.61calls/s
min = 35.47ms
max = 878.76ms
mean = 462.50ms
stddev = 284.91ms
median = 419.90ms
75% <=764.13ms
95% <=877.76ms
98% <=878.76ms
99% <=878.76ms
99.9% <=878.76ms

Health Checks

健康检查,如心跳:

package com.alibaba.cxf.test.metric;

import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.concurrent.TimeUnit; import com.yammer.metrics.HealthChecks;
import com.yammer.metrics.core.HealthCheck;
import com.yammer.metrics.reporting.ConsoleReporter; public class DatabaseHealthCheck extends HealthCheck {
private static Databasedatabase;
private static final Map<String, Result> results = HealthChecks.runHealthChecks(); public DatabaseHealthCheck(Databasedatabase) {
super("database");
this.database =database;
} @Override
public Result check()throws Exception { if(database.isConnected()) {
returnResult.healthy();
} else {
return Result.unhealthy("Cannotconnect to database" );
}
} public static void main(String[] args) throws Exception{
Database db = new Database();
DatabaseHealthCheck checkHealth = new DatabaseHealthCheck(db);
HealthChecks.register(checkHealth); while(true){
Map<String,Result> results = HealthChecks.runHealthChecks();
for(Entry<String, Result> entry : results.entrySet()) {
if (entry.getValue().isHealthy()) {
System.out.println(entry.getKey() +" is healthy");
} else {
System.err.println(entry.getKey() +" is UNHEALTHY: " + entry.getValue().getMessage());
}
}
Thread.sleep(1000);
}
}
}
class Database{
static Random rn = newRandom(); public booleanisConnected() {
// TODOAuto-generated method stub
returnrn.nextBoolean();
} }

效果例如以下:

com.alibaba.cxf.test.metric.TestTimers:
responses:
count = 26
mean rate = 2.15calls/s
1-minute rate = 1.70calls/s
5-minute rate = 1.62calls/s
15-minute rate = 1.61calls/s
min = 35.47ms
max = 878.76ms
mean = 462.50ms
stddev = 284.91ms
median = 419.90ms
75% <=764.13ms
95% <=877.76ms
98% <=878.76ms
99% <=878.76ms
99.9% <=878.76ms

JAVA Metrics 度量工具使用介绍1的更多相关文章

  1. JAVA Metrics 度量工具使用介绍

    转载: http://blog.csdn.net/scutshuxue/article/details/8350135 http://koven2049.iteye.com/blog/968143 h ...

  2. JAVA Metrics度量工具 - Metrics Core 翻译

    Metrics核心 翻译自Metrics官方文档: http://metrics.codahale.com/manual/core/ JAVA Metrics是一个用于度量的一个JAVA的类库,使用请 ...

  3. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  4. Java反编译工具Luyten介绍

    比较精准的一个java反编译工具,笔者有时候用jd-gui反编译不出来的class用luyten都可以反编译出来. 官方网站:https://github.com/deathmarine/Luyten ...

  5. Java日志记录工具SLF4J介绍

    SLF4J是什么 SLF4J是一个包装类,典型的facade模式的工具,对用户呈现统一的操作方式,兼容各种主流的日志记录框架,典型的有log4j/jdk logging/nop/simple/jaka ...

  6. Java Metrics工具介绍

    目录 简介 快速入门 Maven配置 MetricRegistry Gauge Meter Counter Histgram Timer Reporter 更多用法 参考资料 简介 Metric是一个 ...

  7. Java代码质量度量工具大阅兵

    FindBugs FindBugs, a program which uses static analysis to look for bugs in Java code. It is free so ...

  8. 转:介绍几个著名的实用的Java反编译工具,提供下载

    from :http://www.glorze.com/219.html 反编译 众所周知,我们将源代码进行编译,生成可执行的程序或者容器发布包,这个将代码转换的过程就是编译的过程,而反编译就是将这些 ...

  9. Java语言Lang包下常用的工具类介绍_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都 ...

随机推荐

  1. python语言学习1——初识python

    Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 龟叔给Python的定位是“优雅”.“明确”.“简单”,所以Python ...

  2. VB6.0数据库开发五个实例——罗列的总结

    实例一: 系统登录对话框 设计分析:数据库管理系统登录对话框两种基本方法:数据库中建立数据表用于保存系统用户登录信息:支持安全验证的数据库管理系统,可将系统用户定义为数据库用户. 技术要领:1.Ent ...

  3. 从尾到头打印链表--《剑指offer》

    题目:非常easy,就是题目,将链表从尾到头打印出来. 可能我们首先想到的是将链表进行遍历,将之前的訪问的数据进行保存,最后进行反向输出,但是保存数据的空间是个问题:或者是我们将整个链表进行反向操作, ...

  4. 调用WCF的异步方法

    原文:调用WCF的异步方法 AsyncCallback aLoginCallback = delegate(IAsyncResult result) { var aSystemUser = WcfCl ...

  5. C#文件操作基础之File类和FileInfo类

    文件和I/O流的差异: 文件是一些具有永久存储及特定顺序的字节组成的一个有序的.具有名称的集合. 因此对于文件,我们经常想到文件夹路径,磁盘存储,文件和文件夹名等方面. I/O流提供一种后备存储写入字 ...

  6. 斯坦福ML公开课笔记14——主成分分析

    上一篇笔记中,介绍了因子分析模型,因子分析模型使用d维子空间的隐含变量z来拟合训练数据,所以实际上因子分析模型是一种数据降维的方法,它基于一个概率模型,使用EM算法来预计參数. 本篇主要介绍PCA(P ...

  7. SpringMVC @ResponseBody 415错误处理

    在查看下面部分内容之前,请先检查你的请求蚕食是否正确,如果全部正确,请继续往下看 刚开始用SpringMVC, 页面要使用jQuery的ajax请求Controller. 但总是失败,主要表现为以下两 ...

  8. 消息队列(Message Queue)基本概念(转)

    背景 之前做日志收集模块时,用到flume.另外也有的方案,集成kafaka来提升系统可扩展性,其中涉及到消息队列当时自己并不清楚为什么要使用消息队列.而在我自己提出的原始日志采集方案中不适用消息队列 ...

  9. Java虚拟机几个命令行参数说明

    一.运行class文件 执行带main方法的class文件,Java虚拟机命令参数行为: java <CLASS文件名> 注意:CLASS文件名不要带文件后缀.class 例如: java ...

  10. Maven插件之git-commit-id-plugin

    SCM使用GIT而非SVN时,使用Maven发布,总是会出一些莫名其妙的问题,google查找原因,无意中看到了这个插件; 对于该插件,到目前为止,文档比较少,尤其是中文的文档;全部的信息都包含在项目 ...