如何重置 dropwizard 指标的计时器?

How can I reset timer of dropwizard metrics?

我们正在处理定期收到的消息。我们使用 codahale dropwizard 指标' "Timer" 来测量处理它们所需的时间。

我发现有人有同样的问题here: “呈指数衰减的水库的问题是,如果没有新数据进来,它会一直给出相同的数字。例如,假设你用 5 和 7 更新了一个计时器(然后什么都不放) ,那么无论您何时看到(即使在 x 小时后),计时器仍会显示平均值为 6,这无论如何都不代表最后 5 分钟。 所以,它只有在数据一直到达时才有效。"

如深蓝色线所示:

但是没有解决的建议。他们说不会实施:https://github.com/dropwizard/metrics/issues/399

我怎样才能正确地重置这些计时器,或者我应该如何形象化它才不会混淆?

Note: It is too long for comment.

使用 SlidingTimeWindowReservoir 将涵盖大部分用例。 但正如 this comment 中指出的那样,根据事件的数量可能会出现问题: 它将所有测量值保存在 window 内存中,这在大量事件中变得不可接受

我们可以做得更好吗?让我们继续寻找。如果幸运的话,我们会找到 this blog post. It describes exactly your kind of problem. There is a link to their simple dirty solution. Also a suggestion for using HdrHistogram.

metrics mailing list 上也有几条消息正是关于这个问题。 对于 example and point to Marshall Pierce/hdrhistogram-metrics-reservoir。什么是 HdrHistogram 以及为什么用它来测量延迟检查项目描述。

最后,经过更多挖掘,您还可以找到 vladimir-bukhtoyarov/metrics-core-hdr 项目。它也在使用 HdrHistogram

所以有两个相似的库使用相同的数据结构并声称可以解决您遇到的问题。

您可以使用 public com.codahale.metrics.MetricRegistry 的布尔删除(字符串名称) (在此处将计时器名称作为参数传递)每次需要重置时。 删除后,您将创建一个同名的新计时器。它将有零计数器和其他指标。