Java 代碼運行洞察庫 Metrics__Java

來源:互聯網
上載者:User
Metrics是一個java庫,能夠為你提供無與倫比的代碼運行洞察功能。
它是由yammer開發的,用於檢測jvm上後端服務的健全狀態。Metrics提供了一個強大的工具集,用於度量你的生產環境上關鍵組件的行為。

Metrics提供了一組通用的模組庫用於支援比如Guice,Jetty,Log4j,Apache HttpClient,EhCache,Logback,spring等,也提供對比如Ganglia和Graphite等後端的報告。


項目官網:http://metrics.dropwizard.io/


Metrics 主要有五大基本組件

1:Counter

  記錄執行次數

2:Gauge

  擷取某個值

3:Meter

  用來計算事件的速率

4:Histogram

  可以為資料流提供統計資料。 除了最大值,最小值,平均值外,它還可以測量 中值(median),百分比比如XX%這樣的Quantile資料 

5:Timer

  用來測量一段代碼被調用的速率和用時。等於Meter+Hitogram,既算TPS,也算執行時間。


下面是代碼例子

首先加入依賴

<dependency>      <groupId>io.dropwizard.metrics</groupId>      <artifactId>metrics-core</artifactId>      <version>3.1.2</version>  </dependency>  

com.codahale.metrics.MetricRegistry  是 Metrics的核心,這裡先用一個常量儲存

package com.lala.core;    import com.codahale.metrics.MetricRegistry;    public class MetricConstant   {      public static MetricRegistry REGISTER = new MetricRegistry();  }  
上面也是說到了 Metrics支援很多輸出,jmx, log4j , jetty, httpclient等等。我這裡就直接輸出到控制台
package com.lala.core;    import java.util.concurrent.TimeUnit;  import com.codahale.metrics.ConsoleReporter;  /**  * 控制台列印輸出  */  public class MyConsoleReport   {      public static void startReport()      {          final ConsoleReporter reporter = ConsoleReporter.forRegistry(MetricConstant.REGISTER)                  .convertRatesTo(TimeUnit.SECONDS)                  .convertDurationsTo(TimeUnit.SECONDS)                  .build();          //一秒鐘執行一次          reporter.start(1, TimeUnit.SECONDS);      }  }  
首先,來一個基本的公用類

package com.lala.core;    import java.util.concurrent.TimeUnit;  import com.codahale.metrics.MetricRegistry;    public class Base   {      protected static MetricRegistry metric = MetricConstant.REGISTER;      protected static void secondSleep(long value)      {          try          {              TimeUnit.SECONDS.sleep(value);          } catch (InterruptedException e)          {              e.printStackTrace();          }      }      protected static void milliSecondSleep(long value)      {          try          {              TimeUnit.MILLISECONDS.sleep(value);          } catch (InterruptedException e)          {              e.printStackTrace();          }      }  }  
接下來,就示範這五大組件的基本用法

一:Counter

[java]  view plain  copy package com.lala.demo;      import java.util.Random;      import com.codahale.metrics.Counter;   import com.lala.core.Base;   import com.lala.core.MyConsoleReport;      /**   * 記錄執行次數   */   public class CounterTest extends Base   {       final static Counter exec = metric.counter("com.pp.counter.invoke");       public static void main(String[] args)       {           MyConsoleReport.startReport();           new Thread(()->{               for(int i=1;i<=3;i++)               {                   exec.inc();                   milliSecondSleep(new Random().nextInt(500)*2);               }           }).start();           secondSleep(3);       }   }  
輸出如下:

15-11-22 20:38:29 ==============================================================


-- Counters --------------------------------------------------------------------
com.pp.counter.invoke
             count = 3


二:Gauge

[java]  view plain  copy package com.lala.demo;  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.