首页 > 解决方案 > 用千分尺测量信号量等待时间

问题描述

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

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

我想收集有关信号量对方法的整体响应时间的影响的指标。例如,我想知道等待获取的线程数、等待所花费的时间等,我想,我在寻找什么也可以捕获时间信息的量规?

如何测量 Semphore 统计数据?

标签: micrometer

解决方案


根据您的需求和情况,您可以做多种事情。

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

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


推荐阅读