繁体   English   中英

如何为单个流程实现dropwizard指标?

[英]how to implement dropwizard metrics for a single process?

嗨,我是Java新手,正在尝试学习如何使用Dropwizard Metrics库来衡量单个进程的性能。 我查看了他们的入门知识,并运行了他们为MetricsRegistry编写的内容,但不了解如何将流程和metricsRegistry合并为一个(在这里它衡量的是我的流程所花费的时间,而不是它所花费的时间)跑步)。

我可能措辞错了很多,但希望我的问题很清楚。 在此先感谢您可以获得任何帮助/说明! 我将以下要测量的代码(pi位数到n位数)与Dropwizard Metrics入门的内容粘贴在一起:

package decimals;

import java.util.Scanner;
import java.math.BigDecimal;


public class Decimals {


    public static void main(String[] args) {

        BigDecimal seven = new BigDecimal(7.0);
        Scanner input = new Scanner(System.in);
        System.out.println("to what nth?");
        int i = input.nextInt();
        BigDecimal pi = new BigDecimal(22.0).divide(seven, i, BigDecimal.ROUND_UP);

        if ( i < 0) {
            System.out.println("can't be less than 0");
        } else {
            System.out.println(pi);
        }
    }
}

//dropwizardmetrics:


package com.***.***;
import com.codahale.metrics.*;
import java.util.concurrent.TimeUnit;

public class MetricsRegistry {
    static final MetricRegistry metrics = new MetricRegistry();
    public static void main(String args[]) {
        startReport();
        Meter requests = metrics.meter("requests");
        requests.mark();
        wait5Seconds();
    }

    private static void startReport() {
        ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics)
                .convertRatesTo(TimeUnit.SECONDS)
                .convertDurationsTo(TimeUnit.MILLISECONDS)
                .build();
        reporter.start(2, TimeUnit.SECONDS);
    }

    private static void wait5Seconds() {
        try {
            Thread.sleep(5*1000);
        }
        catch(InterruptedException e) {}
    }



}

将您所有的Pi计算逻辑放到一个名为computePi()的方法中,然后在您的main方法中尝试:

public static void main(String args[]) {
    startReport();
    Timer timer = metricRegistry.timer("computePi");    
    Timer.Context context = timer.time();
    try {
        computePi();
    } finally {
        context.stop();
    }
}

在您的示例中,您使用的是仪表,它不测量执行时间(它测量发生率和总计数)。 我将其更改为计时器,它也可以测量时间。 当我调用timer.time()时,计时器开始计时。 然后,我在try块中执行您的computePi()进程。 无论computePi()内部发生什么情况,我都使用“ finally”块来停止计时器。 这是您获得执行过程所需的确切时间的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM