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

以下简介下Metrics怎样使用。

Maven地址:

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

com.yammer.metrics

metrics-core

2.2.0

以下通过一些測试代码介绍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 queue = new LinkedList();

public static void main(String[] args) throws InterruptedException{

ConsoleReporter.enable(5,TimeUnit.SECONDS);

Gaugeg = Metrics.newGauge(TestGauges.class, "pending-jobs", newGauge() {

@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 queue = new LinkedList();

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 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 results = HealthChecks.runHealthChecks();

for(Entry 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度量页面_JAVA Metrics 度量工具使用介绍1相关推荐

  1. java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程

    java lambda函数 " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的 ...

  2. java系统监控_Java Metrics系统性能监控工具

    Metrics是一个Java库,可以对系统进行监控,统计一些系统的性能指标. 比如一个系统后台服务,我们可能需要了解一下下面的一些情况: 1.每秒钟的请求数是多少(TPS)? 2.平均每个请求处理的时 ...

  3. java 微型数据库_Java 9代码工具:使用Java微型基准测试工具的实践会话

    java 微型数据库 用肉眼看,基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题. 但是,通常情况下,这是幼稚的方法. 提供具有准确和可重复结果的有意义的基准并非易事. 在本文中,我们将向您 ...

  4. java 查看内存_java 内存查看工具

    业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...

  5. java 静态类 安全_Java静态static工具类线程安全问题研究

    针对静态方法有以下一些前提: 静态方法和实例方法的区别是静态方法只能引用静态变量,静态方法通过类名来调用,实例方法通过对象实例来调用 每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自 ...

  6. java导出类_java导出excel工具类

    java导出excel须要使用HSSFWorkbook这个类,须要导入poi-3.6-20091214.jar 工具类调用例如以下: package com.qlwb.business.util; i ...

  7. java mathrandom函数_java Math数学工具及Random随机函数

    Math类包含用于执行基本数学运算的方法,如绝对值.对数.平方根和三角函数.它是一个final类,其中定义的都是一些常量和静 态方法.常用方法如下: public static double sqrt ...

  8. java时间随机数_java开发代码工具类(时间戳/随机数/日期等)

    简介 java开发代码工具类,提高开发效率,持续更新~ 实践 package com.springboot.sixmonth.common.util; import java.math.BigInte ...

  9. java错误页面_java自定义错误页面实现方法

    java后台自定义错误页面:(推荐:java视频教程) java后台项目中,经常会出现404或500等错误, 如果不做设置,服务器会默认返回404或500的错误页面 给前端显示错误页面. 掌握了错误页 ...

最新文章

  1. java 它 引用(基本类型的包装,构造函数和析构函数c++不同)
  2. 生命周期共有那几个阶段_一文搞懂ReactNative生命周期的进化
  3. 2.ceph高级操作
  4. This graphics driver could not find compatible graphics hardware 解决
  5. ionic android n权限,ionic3 读写权限申请
  6. MQTT再学习 -- 漫谈MQTT协议
  7. jms activemq_带有ActiveMQ的JMS
  8. python做股票分析_利用Python进行股票投资组合分析(调试)
  9. java 匹配最后一次出现的字符_在Java中查找字符串中字符的最后一次出现
  10. 全民营销时代,让私域流量变成业务增量需要几步?
  11. 33 个 JavaScript 核心概念系列(四): == 与 ===
  12. php里的header,PHP中常用的header头部定义有哪些
  13. SLAM机器人开发(一)系统框图
  14. 新手入门:Javascript的使用技巧大全(一)
  15. 转:JavaScript 全栈工程师培训教程
  16. 基于stm32的智能家居语音控制系统
  17. 算法训练营 day20 二叉树 最大二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉树
  18. web前端培训—css源码笔记(二)【爱创课堂】
  19. 从Flink SQL doesn't support consuming update and delete changes 错误谈起
  20. python中的框架是什么_python开发框架介绍

热门文章

  1. R语言e1071包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现
  2. R语言dplyr包使用group_by函数、arrange函数和filter函数获取每个分组的第一个、第N个、最后一个记录实战
  3. 影像组学视频学习笔记(7)-特征筛选之LASSO回归(代码)、Li‘s have a solution and plan.
  4. ART基因序列生成器,究竟是做什么的?
  5. 昆虫基因组DNA的优化提取,可进行长读测序
  6. centos安装ffmpeg php,lnmp下安装ffmpeg和ffmpeg-php教程
  7. 目标检测- YOLO v1--You Only Look Once
  8. 使用overlap-add方法计算两个信号的卷积示例(在频域计算卷积)
  9. LeetCode 230. Kth Smallest Element in a BST--C++,Python解法--面试真题--找二叉树中第K小的元素
  10. C++的类什么时候需要虚析构函数