问题描述
我们有一个节流实现,基本上可以归结为:
Semaphore s = new Semaphore(1);
...
void callMethod() {
s.acquire();
timer.recordCallable(() -> // call expensive method);
s.release();
}
我想收集有关信号量对方法整体响应时间的影响的指标。例如,我想知道等待获取的线程数、等待的时间等等,我想,我在寻找什么也能捕获时间信息的 guage?
我如何衡量 Sephore 统计数据?
解决方法
根据您的需要和情况,您可以执行多种操作。
LongTaskTimer
是一个计时器,用于测量当前正在进行的任务。进行中的部分是这里的关键,因为在任务完成后,您将看不到它对计时器的影响。这就是为什么它适用于长时间运行的任务,我不确定它是否适合您的用例。
您可以做的另一件事是使用 Timer
和 Gauge
,其中计时器测量获取 Semaphore
所花费的时间,同时使用仪表,您可以递增/减少当前等待它的线程数。