当前位置: 首页 > 知识库问答 >
问题:

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

谢胤
2023-03-14

嗨,我是java的新手,正在尝试学习如何使用Dropwizard指标库来衡量单个进程的性能。我已经查看了他们的入门,并运行了他们为Metricsignstry编写的内容,但不了解如何将流程和指标注册合并为一个(它测量的是我的流程所花费的时间,而不是它自己运行所需的时间)。

我可能写错了很多东西,但希望我的问题足够清楚。提前感谢我能得到的任何帮助/澄清!我将下面要测量的代码(pi数字到第n个数字)与Dropwizard指标为他们的入门提供了什么粘贴在一起:

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) {}
    }



}

共有1个答案

贺君浩
2023-03-14

将所有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();
    }
}

在您的示例中,您使用的是 Meter,它不测量执行所需的时间(它测量发生率和总计数)。我把它改成了一个计时器,它也测量时间。计时器在我调用计时器时开始。.然后,我在尝试块中执行您的计算Pi()进程。我使用一个“最终”块来停止计时器,无论计算Pi()内部发生什么。这就是您获得执行流程所需确切时间的方式。

 类似资料:
  • 我有大约20个API,我想为每个API实现执行时间、响应计数等统计信息。在做了一些研究之后,我了解到dropwizard度量是实现这些功能的最佳方法。我使用的是SpringMVC框架(不可启动)。有人能建议我如何将度量集成到Spring MVC框架中吗? 如果可能,请提供任何代码作为参考。

  • 问题内容: 有时我会看到许多应用程序,例如msn,Windows Media Player等都是单实例应用程序(当用户在应用程序运行时执行时,将不会创建新的应用程序实例)。 在中,我为此使用类,但是我不知道如何在Java中执行此操作。 问题答案: 我在主要方法中使用以下方法。这是我所见过的最简单。

  • 我们正在处理定期收到的消息。我们使用codahale dropwizard指标的“计时器”来测量处理这些指标所需的时间。 我发现有人在这里也有同样的问题:“指数衰减水库的问题是,如果没有新数据进来,它会一直给出相同的数字。例如,假设你用5和7更新一个计时器(然后什么都不要放),然后不管你什么时候看到(甚至在x小时之后),计时器仍将显示平均值为6,这无论如何都不能代表过去5分钟的结果。因此,只有当数

  • 我有一个Dropwizard应用程序,它使用Dropwizard度量并使用BigTable进行持久化。我已经从我的应用程序向graphite报告了指标,并且也希望报告客户端BigTable指标。我看到现有的类<code>BigtableClientMetrics<code>支持报告客户端指标<还提供了code>DropwizardMetricRegistry,它包装了DropWidger并创建了类

  • 本文向大家介绍如何简单的实现一个promise?相关面试题,主要包含被问及如何简单的实现一个promise?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先明确什么是promiseA+规范,参考规范的地址:primise A+规范 如何实现一个promise,参考我的文章: 实现一个完美符合Promise/A+规范的Promise 一般不会问的很详细,只要能写出上述文章中的v1.0版本

  • 我们使用Jersey和web创建了多个APIendpoint。xml设置而不是资源配置设置。我们希望捕获并显示每个endpoint的所有请求的度量,包括所有不同的响应代码。到目前为止,我已经创建了一个类,它扩展了InstrumentedFilterContextListener,并在其中包含了Graphite reporter。 在web.xml中,我添加了以下块来使报告工作: 因此,通过上述配置