Java 如何计算延迟

Java 如何计算延迟,java,networking,Java,Networking,我创建了一些测量延迟、数据包大小和带宽的Java代码 计算延迟所需的方程式是什么 这是我目前使用的,但不确定是否正确: //latency = packetsize / delay + bandwidth System.out.println("latency is " + (len*2) / (duration + transferRateMb)); 编辑 将长度乘以2以获得正确的字节值 持续时间是完成ping所用的时间 传输速率可通过以下方式找到: double transferRate

我创建了一些测量延迟、数据包大小和带宽的Java代码

计算延迟所需的方程式是什么

这是我目前使用的,但不确定是否正确:

//latency = packetsize / delay + bandwidth 
System.out.println("latency is " + (len*2) / (duration + transferRateMb));
编辑 将长度乘以2以获得正确的字节值

持续时间是完成ping所用的时间

传输速率可通过以下方式找到:

double transferRateMb = ((len*524288.0) / (duration/ 1000000000.0) ) ; //amount of data in megabytes transferred in 1 second. 
我读过各种各样的指南,但不理解它们,这只是一个项目的简单要求

此外,这将运行20次,取平均值


有什么想法吗?

我总是测量延迟。平均延迟通常不是很有趣,您真正需要知道的是延迟可能有多糟糕,例如100分之一、1000分之一或更糟的情况。要做到这一点,您需要测量每个延迟并对其进行采样(或保持最大值),这将远远高于您的计算值,例如,很容易达到10倍


简而言之,你不能计算你应该关心的延迟,你必须测量它。

我希望
(duration+transferRateMb)
给你双倍的值,并且已经询问的延迟受网络拥塞的影响最大,随着时间的推移会有很大的变化,一个方向上的延迟可能与返回延迟不匹配。没有真正的方法得到一个公式来告诉你延迟是什么。这就是为什么我们有诸如IP SLA之类的工具来持续测量实际延迟。感谢我计划运行测试20次并取平均值,我如何测量延迟?我建议多次运行测试并忽略前20000秒或前2秒(以允许测试预热)在邮件中使用时间戳,并将其与到达时的时间戳进行比较,您可以记录每条邮件所用的时间。如果您再测量10000条,您可以得到一个合理的99%平铺,如果您测量1000000条,您可以得到一个合理的99.9%平铺。要获得百分位数,请对结果进行排序,例如在int[]中,取中值为50%,大小*9/10为90%平铺,大小*99/100为99%,大小*999/1000为99.9%确定谢谢,我的公式可以计算吗?您可以计算出最佳情况下的延迟。这不是很有用。只有通过测试才能获得最坏情况下的延迟。