我正在使用 LatencyUtils 软件包来跟踪和报告测量中的延迟行为:
- https://github.com/LatencyUtils/LatencyUtils/blob/d8f51f39f6146e1ad9a263dc916bcbc0ec06e16d/src/main/java/org/LatencyUtils/LatencyStats.java#L196
对于通过这种方法记录时间,时间单位应该是纳秒,但在我的情况下,记录的时间以毫秒为单位。我想知道是否有更好的方法来以毫秒为单位记录时间?
我现在使用的解决方案是将所有记录的时间乘以一百万。但我仍然希望结果以微秒为单位,所以对于我得到的结果,我将其除以一百万。
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
的最低可跟踪延迟也以纳秒为单位。如果我把一个值放在毫秒内,恐怕会影响记录的结果。
我可以为您提供另一个开源库,该库提供了可以将值从一个时间单位转换为另一个时间单位的实用程序。它被称为MgntUtils。请参阅此 javadoc 了解类 TimeInterval。这是将时间间隔保存为数值及其关联时间单位的便利类。该类还提供了将其值检索为所需比例(纳秒,毫秒,秒,分钟,小时或天(的方法,请参阅方法toNanos((,toMillis((,toSeconds((,toMinutes((,toHours((,toDays((。你可以在Github和Maven Central上找到库本身作为maven工件。这是一篇关于图书馆的文章