简单的类来测量延迟

这是我编写的用于测量延迟的非常简单的类。 HDRHistogram并不是劳斯莱斯解决方案,但是如果您只想向项目添加一个类,则可以很好地解决问题。

这是一个简单的测试程序,向您展示其用法:

package util;
 
public class LatencyMeasureExample {
    public static void main(String[] args) throws InterruptedException{
        //Below are a couple of examples
        LatencyMeasure lm = new LatencyMeasure(1000000);
 
        System.out.println("Thread.sleep() random");
        for (int i = 0; i < 100000; i++) {
            lm.startMeasure();
            Thread.sleep((long)Math.random()*10);
            lm.endMeasure();
        }
        lm.printStats();
 
        lm = new LatencyMeasure(1000000);
 
        double d = 0;
        System.out.println("\nMath.sqrt");
        for (int i = 0; i < 100000; i++) {
            lm.startMeasure();
            d+=Math.sqrt(i);
            lm.endMeasure();
        }
 
        lm.printStats();
    }
}

这是一些示例输出:

Thread.sleep() random
Latency measured:
 0.32 us for 50 percentile
 0.44 us for 90 percentile
 0.68 us for 99 percentile
 26.82 us for 99.9 percentile
 582.66 us for 99.99 percentile
 2024.92 us worst percentile
Math.sqrt
Latency measured:
 0.04 us for 50 percentile
 0.06 us for 90 percentile
 0.09 us for 99 percentile
 0.12 us for 99.9 percentile
 0.20 us for 99.99 percentile
 28.17 us worst percentile

只有4种方法:

  • 构造函数:这需要一个int表示要测量的最大次数。 除了对内存的影响外,过大的大小也不是问题。 在此实现中,您至少需要进行10,000次测量才能使代码正常工作。 如果您想花更少的钱,只需在printStats()中适当调整代码即可。
  • 在要测量的代码的任一侧调用startMeasure()和endMeasure()。
  • printStats()打印出结果。

实施如下:

package util;
 
import java.util.Arrays;
 
public class LatencyMeasure {
 
    private long[] times;
    private long time;
    private int index=0;
 
    public LatencyMeasure(int maxCapacity) {
        times = new long[maxCapacity];
 
        for (int i = 0; i < times.length; i++) {
            times[i] = -1;
        }
    }
 
    public void startMeasure(){
        time = System.nanoTime();
    }
 
    public void endMeasure() {
        times[index++] = System.nanoTime()-time;
    }
 
    public void printStats() {
        int filled = 0;
        for (int i = 0; i < times.length; i++) {
            if (times[i] == -1) {
                filled = i;
                break;
            }
        }
 
        long[] popTimes = new long[filled];
        System.arraycopy(times, 0, popTimes, 0, filled);
 
        Arrays.sort(popTimes);
        System.out.printf("Latency measured: \n" +
                        " %.2f us for 50 percentile\n" +
                        " %.2f us for 90 percentile\n" +
                        " %.2f us for 99 percentile\n" +
                        " %.2f us for 99.9 percentile\n" +
                        " %.2f us for 99.99 percentile\n" +
                        " %.2f us worst percentile\n",
                popTimes[popTimes.length / 2] / 1e3,
                popTimes[popTimes.length * 9 / 10] / 1e3,
                popTimes[popTimes.length - popTimes.length / 100] / 1e3,
                popTimes[popTimes.length - popTimes.length / 1000] / 1e3,
                popTimes[popTimes.length - popTimes.length / 10000] / 1e3,
                popTimes[popTimes.length - 1] / 1e3
        );
    }
}

翻译自: https://www.javacodegeeks.com/2015/05/simple-class-to-measure-latency.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值