java - LatencyUtils 'recordLatency' 方法的时间单位问题
问题描述
我正在使用 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
也是纳秒级的。如果我以毫秒为单位放一个值,恐怕会影响记录的结果。
解决方案
我可以为您提供另一个开源库,它提供了可以将值从一个时间单位转换为另一个时间单位的实用程序。它称为 MgntUtils。有关TimeInterval类,请参阅此 javadoc 。这是将时间间隔保存为数值及其关联的 TimeUnit 的便利类。该类还提供了将其值检索为所需刻度(纳秒、毫秒、秒、分钟、小时或天)的方法,请参见方法 toNanos()、toMillis()、toSeconds()、toMinutes()、toHours() , toDays()。您可以在Github和Maven Central上找到作为 maven 工件的库本身。这是一篇关于图书馆的文章
推荐阅读
- argo-workflows - 如何为 Argo Workflow DAG 中的每个步骤传递不同的参数值
- flexbox - Flexbox、uk-flex-left 和 uk-flex-right
- docusignapi - 签名后 HTML 文档缩小
- hyperledger-fabric - 隐式策略评估失败 - ... 需要满足 1 个“作家”子策略:权限被拒绝
- python - 视频无法在 django 中加载
- java - 平衡二叉搜索树
- flutter - 如何像在 instagram 中一样在颤动中从一个提要转到另一个提要
- java - 如何在spring中运行post配置代码
- javascript - 日期时间根据环境而变化
- c++ - lambda 表达式是合法的默认(非类型模板)参数吗?