Использование Caliper для сравнения REST Services ... или нет? - PullRequest
0 голосов
/ 27 февраля 2012

Я хочу сравнить время отклика между различными услугами, которые я сделал. Я слышал о Caliper, поэтому я решил использовать его очень просто, чтобы совершать звонки и измерять их, с некоторыми функциями, подобными этим:

public void timeCallingService(int reps) {
    String url = "http://localhost:8080/myservice/rest/"+size;
    for (int i = 0; i < reps; i++) {
        new Client(url);
    }
}

где размер - это заданный параметр для Caliper и Client класса, который я написал, который просто звонит в службу и проверяет, в порядке ли статус.

Все работает нормально, за исключением некоторых служб, которые требуют слишком много времени для ответа, поэтому у меня есть ошибка в Caliper:

Error: Runtime 1.06027641E11ns/rep out of range 0.1-1.0E10

Я пытался поиграть с некоторыми параметрами, такими как warmupMillis и runMillis, но, похоже, это не работает.

Итак:

  1. Есть ли простой способ решить мою проблему?
  2. если нет, то какую среду тестирования я могу использовать для сравнения, учитывая тот факт, что я не хочу ничего сложного?

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

Я прошу прощения за это.У Caliper 0.5 есть некоторые причуды, подобные этому, но Caliper 1.0, с которым мы работаем (а), менее антивендивен в отношении того, что он ожидает увидеть при подобной синхронизации, (b) делает множество значений настраиваемыми (например, интервал синхронизации).; вы можете сделать это дольше, чем 1 секунда), и (c) также позволяет подключить другой измерительный прибор, если логика MicrobenchmarkInstrument просто не работает для вас.

К сожалению, я не могу обещать выпускдата еще.(

0 голосов
/ 15 февраля 2013

Штангенциркуль, используемый в TimeMeasurer.class (см. Источник TimeMeasurer.java, строки 80-84), ограничения на определение допустимого возможного времени. Это ограничения нижнего предела (0,1 нс) и верхнего предела (10 секунд). Вот почему любая более длинная мера, чем upperBound, или любая более быстрая мера, чем lowerBound, создает исключение RuntimeOutOfRangeException. Так что, если вы действительно застряли на этом, чем пытаетесь скомпилировать этот класс с другими предельными границами, или было бы лучше написать об этом автору суппорта и предложить добавить параметр времени выполнения о чем (например, для установки upperBound). Кажется (и, может быть, на самом деле это так), этот инструмент измерения предназначен для измерения быстрых процессов, когда наносекунды важны для анализа. И когда вы что-то измеряете, и это длится более 10 секунд, возможно, вам следует использовать другой измерительный инструмент ... В любом случае, есть решение ...

...