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

用千分尺测量信号量等待时间

邓鸿彩
2023-03-14

我们有一个限制实现,基本上可以归结为:

Semaphore s = new Semaphore(1);
...
void callMethod() {
    s.acquire();
    timer.recordCallable(() -> // call expensive method);
    s.release();
}

我想收集关于信号量对方法的整体响应时间的影响的指标。例如,我想知道等待获取的线程数量,等待的时间等等。我想,我正在寻找的是一种也能捕捉时间信息的量规。

如何测量Semphore统计数据?

共有1个答案

佟云
2023-03-14

根据你的需求和情况,你可以做很多事情。

LongTaskTimer是一个计时器,用于测量当前正在进行的任务。正在进行的部分是这里的关键,因为在任务完成后,您不会看到它对计时器的影响。这就是为什么它适用于长时间运行的任务,我不确定它是否适合您的用例。

您可以做的另一件事是拥有计时器和仪表,计时器在其中测量获取信号量所需的时间,而使用仪表时,您可以增加/减少当前等待它的线程数。

 类似资料:
  • 是否有任何方法可以测量实用程序如何使用线程池?我已经浏览了代码,但还没有看到任何直接的选项。

  • 我想测量使用WebFlux进行的一些异步调用的长度。我已经阅读了各种来源,因为我了解到注释与AspectJ一起工作,基本上只是在方法调用之前启动计时器,然后停止。这显然不适用于异步方法。 是否有任何针对WebFlux的解决方案,或者我唯一能做的就是传递执行时间戳,使我的应用程序逻辑混乱?

  • 在Dropwizard中,有一些类似的东西:https://metrics.dropwizard.io/3.1.0/getting-started/#meters它允许我通过调用指标上的方法来测量事件的速率。 我怎样才能在千分尺中做到这一点? 我可以使用计时器,但我不想传递< code >计时器。采样对象到任何需要调用< code>stop()方法的地方。 与Dropwizard相比,Microm

  • 我有一个Spring Boot应用程序,我现在正在迁移到Micrometer。 我想实现的是,随着时间的推移计算特定对象的调用。 让我们假设我有一个创建某些品牌的汽车的功能。然后我想测量一下我在过去一分钟内创造了多少辆福特,斯柯达,大众等。特别是,如果在 之间没有创建斯柯达,则指标应返回 0。 文档声明我不应该使用计数器,因为在运行应用程序时,创建的汽车数量可能会无限增长。计时器也不太合适,因为我

  • 我正在将一个微服务更新到spring Boot2,并将度量标准从dropwizard迁移到Micrometer。我们正在使用普罗米修斯来存储度量标准,并使用格拉法纳来显示它们。我想测量每秒对所有URL的请求。千分尺文档说明:

  • 问题内容: 我找不到如何测量线程等待锁定的时间。我必须确定一个线程是否正在等待锁定超过1秒,如果需要,则运行另一个线程。谢谢! 问题答案: 试试这个: