0

データを HashMap のようなものに入れて、サービスのパフォーマンスを測定しようとしています 。X呼び出しの数はYミリ秒で返されました。以下は非常に単純な私のコードです。サービスにヒットする前にタイマーを設定し、応答が返ってきた後に時間を測定します。

private static void serviceCall() {

    histogram = new HashMap<Long, Long>();
    keys = histogram.keySet();
    long total = 10;
    long runs = total;

    while (runs > 0) {

        long start_time = System.currentTimeMillis();

        // hitting the service      
        result = restTemplate
                .getForObject("Some URL",String.class);

        long difference = (System.currentTimeMillis() - start_time);

        Long count = histogram.get(difference);
        if (count != null) {
            count++;
            histogram.put(Long.valueOf(difference), count);
        } else {
            histogram.put(Long.valueOf(difference), Long.valueOf(1L));
        }
        runs--;
    }
    for (Long key : keys) {
        Long value = histogram.get(key);
        System.out.println("SERVICE MEASUREMENT, HG data, " + key + ":" + value);
    }
}

現在、私が得ている出力は次のようなものです-

SERVICE MEASUREMENT, HG data, 166:1
SERVICE MEASUREMENT, HG data, 40:2
SERVICE MEASUREMENT, HG data, 41:4
SERVICE MEASUREMENT, HG data, 42:1
SERVICE MEASUREMENT, HG data, 43:1
SERVICE MEASUREMENT, HG data, 44:1

つまり1 call came back in 166 ms、 で2 calls came back in 40 msあり、他の出力と同じです。

問題文:-

私が今探しているのは、このようなものです。このような範囲設定が必要です-

X Number of calls came back in between 1 and 10 ms
Y Number of calls came back in between 11 and 20 ms
Z Number of calls came back in between 21 and 30 ms
P Number of calls came back in between 31 and 40 ms
T number of calls came back in between 41 and 50 ms

....
....

I number of calls came back in more than 100 ms

また、範囲を構成する方法もあります。将来、範囲を微調整する必要があるとします。それができるはずです。現在のプログラムでこれを達成するにはどうすればよいですか? どんな提案でも大いに役立ちます。

4

1 に答える 1

1

ヒストグラムは、同じサイズの「ビン」に配置されたデータのセットです。時間測定値をビンに変換し、そのビンをマップ キーとして使用する必要があります。これは、時間値をビン サイズで割るだけで簡単に実行できます。例: time / 10L.

于 2013-01-31T01:45:19.060 に答える