6

我正在使用 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也是纳秒级的。如果我以毫秒为单位放一个值,恐怕会影响记录的结果。

4

1 回答 1

0

我可以为您提供另一个开源库,它提供了可以将值从一个时间单位转换为另一个时间单位的实用程序。它称为 MgntUtils。有关TimeInterval类,请参阅此 javadoc 。这是将时间间隔保存为数值及其关联的 TimeUnit 的便利类。该类还提供了将其值检索为所需刻度(纳秒、毫秒、秒、分钟、小时或天)的方法,请参见方法 toNanos()、toMillis()、toSeconds()、toMinutes()、toHours() , toDays()。您可以在GithubMaven Central上找到作为 maven 工件的库本身。这是一篇关于图书馆的文章

于 2019-07-16T14:49:36.073 回答