我正在使用 LatencyUtils 包来跟踪和报告跨测量的延迟行为:
通过这种方法记录时间,时间单位应该是纳秒,但在我的例子中,记录的时间是以毫秒为单位的。我想知道是否有更好的方法以毫秒为单位记录时间?
我现在使用的解决方案是将所有记录的时间乘以一百万。但是我还是希望结果以微秒为单位,所以对于我得到的结果,我除以一百万。
public void addValue(Long val, long sampleCount) {
sum += val * sampleCount;
for (int i = 0; i < sampleCount; i++) {
latencyStats.recordLatency(val*1000000);
}
histogram.add(latencyStats.getIntervalHistogram());
max = Math.max(val, max);
min = Math.min(val, min);
updateValueCount(val,sampleCount);
}
@Override
public double getStandardDeviation() {
return histogram.getStdDeviation()/1000000;
}
的默认构造函数LatencyUtil
是这样的:
private long lowestTrackableLatency = 1000L; /* 1 usec */
private long highestTrackableLatency = 3600000000000L; /* 1 hr */
private int numberOfSignificantValueDigits = 2;
private int intervalEstimatorWindowLength = 1024;
private long intervalEstimatorTimeCap = 10000000000L; /* 10 sec */
private PauseDetector pauseDetector = null;
public LatencyStats() {
this(
defaultBuilder.lowestTrackableLatency,
defaultBuilder.highestTrackableLatency,
defaultBuilder.numberOfSignificantValueDigits,
defaultBuilder.intervalEstimatorWindowLength,
defaultBuilder.intervalEstimatorTimeCap,
defaultBuilder.pauseDetector
);
}
所以,事实上,最低的可跟踪延迟LatencyUtil
也是纳秒级的。如果我以毫秒为单位放一个值,恐怕会影响记录的结果。