使用 Micrometer 测量信号量等待时间

问题描述

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

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

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

我如何衡量 Sephore 统计数据?

解决方法

根据您的需要和情况,您可以执行多种操作。

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

您可以做的另一件事是使用 TimerGauge,其中计时器测量获取 Semaphore 所花费的时间,同时使用仪表,您可以递增/减少当前等待它的线程数。