java度量页面_JAVA Metrics 度量工具使用介绍1
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相关推荐
- java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程
java lambda函数 " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的 ...
- java系统监控_Java Metrics系统性能监控工具
Metrics是一个Java库,可以对系统进行监控,统计一些系统的性能指标. 比如一个系统后台服务,我们可能需要了解一下下面的一些情况: 1.每秒钟的请求数是多少(TPS)? 2.平均每个请求处理的时 ...
- java 微型数据库_Java 9代码工具:使用Java微型基准测试工具的实践会话
java 微型数据库 用肉眼看,基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题. 但是,通常情况下,这是幼稚的方法. 提供具有准确和可重复结果的有意义的基准并非易事. 在本文中,我们将向您 ...
- java 查看内存_java 内存查看工具
业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...
- java 静态类 安全_Java静态static工具类线程安全问题研究
针对静态方法有以下一些前提: 静态方法和实例方法的区别是静态方法只能引用静态变量,静态方法通过类名来调用,实例方法通过对象实例来调用 每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自 ...
- java导出类_java导出excel工具类
java导出excel须要使用HSSFWorkbook这个类,须要导入poi-3.6-20091214.jar 工具类调用例如以下: package com.qlwb.business.util; i ...
- java mathrandom函数_java Math数学工具及Random随机函数
Math类包含用于执行基本数学运算的方法,如绝对值.对数.平方根和三角函数.它是一个final类,其中定义的都是一些常量和静 态方法.常用方法如下: public static double sqrt ...
- java时间随机数_java开发代码工具类(时间戳/随机数/日期等)
简介 java开发代码工具类,提高开发效率,持续更新~ 实践 package com.springboot.sixmonth.common.util; import java.math.BigInte ...
- java错误页面_java自定义错误页面实现方法
java后台自定义错误页面:(推荐:java视频教程) java后台项目中,经常会出现404或500等错误, 如果不做设置,服务器会默认返回404或500的错误页面 给前端显示错误页面. 掌握了错误页 ...
最新文章
- java 它 引用(基本类型的包装,构造函数和析构函数c++不同)
- 生命周期共有那几个阶段_一文搞懂ReactNative生命周期的进化
- 2.ceph高级操作
- This graphics driver could not find compatible graphics hardware 解决
- ionic android n权限,ionic3 读写权限申请
- MQTT再学习 -- 漫谈MQTT协议
- jms activemq_带有ActiveMQ的JMS
- python做股票分析_利用Python进行股票投资组合分析(调试)
- java 匹配最后一次出现的字符_在Java中查找字符串中字符的最后一次出现
- 全民营销时代,让私域流量变成业务增量需要几步?
- 33 个 JavaScript 核心概念系列(四): == 与 ===
- php里的header,PHP中常用的header头部定义有哪些
- SLAM机器人开发(一)系统框图
- 新手入门:Javascript的使用技巧大全(一)
- 转:JavaScript 全栈工程师培训教程
- 基于stm32的智能家居语音控制系统
- 算法训练营 day20 二叉树 最大二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉树
- web前端培训—css源码笔记(二)【爱创课堂】
- 从Flink SQL doesn't support consuming update and delete changes 错误谈起
- python中的框架是什么_python开发框架介绍
热门文章
- R语言e1071包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现
- R语言dplyr包使用group_by函数、arrange函数和filter函数获取每个分组的第一个、第N个、最后一个记录实战
- 影像组学视频学习笔记(7)-特征筛选之LASSO回归(代码)、Li‘s have a solution and plan.
- ART基因序列生成器,究竟是做什么的?
- 昆虫基因组DNA的优化提取,可进行长读测序
- centos安装ffmpeg php,lnmp下安装ffmpeg和ffmpeg-php教程
- 目标检测- YOLO v1--You Only Look Once
- 使用overlap-add方法计算两个信号的卷积示例(在频域计算卷积)
- LeetCode 230. Kth Smallest Element in a BST--C++,Python解法--面试真题--找二叉树中第K小的元素
- C++的类什么时候需要虚析构函数