Синхронизация метода с использованием аннотации @Timed - в зависимости от размера ввода - PullRequest
0 голосов
/ 29 апреля 2018

Используя аннотацию @Timed, мы можем определить время, необходимое для запуска метода:

@Timed 
public void loopInput(int counter){
    for (int i = 0; i < counter; i++){
        i++;
    }
}

Но, допустим, у нашего метода есть некоторый ввод, что его размер может существенно изменить время, необходимое для запуска метода (как в примере выше).

Разве измерения времени, заданные @Timed, не имеют смысла без какой-либо дополнительной потенциальной информации о размере входного сигнала?

Это также будет бессмысленно в случае разного размера вывода:

    @Timed
    public void printStudentCourses(int studentId){
       //get student from DB
       // ...
       for (Course cource: Student.getCourses()) {
          System.out.println(cource);
       }
    }

Конечно, это займет больше времени, чтобы напечатать студентов с большим списком курсов.

Итак:

  1. Какую реальную информацию мы можем получить из @Timed измерения?
  2. Есть ли способ добавить дополнительную информацию для измерения @Timed?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

использование @Timer варьируется в зависимости от приложения. Я лично использую его для измерения времени выполнения запросов сервлета. Таким образом, в этом случае вы получаете общее представление о времени выполнения для каждого запроса и можете создавать интересные графики, которые дают вам представление о том, как работает ваше приложение, и в случае, если что-то идет не так, вы можете создавать оповещения (с использованием другой коллекции метрик). инструменты, такие как Прометей). Итак, чтобы ответить на ваши вопросы:

  1. Вы можете измерить время функции во времени (не заботясь о размере ввода), создать гистограмму, отслеживать работоспособность приложения
  2. Одним из решений было бы добавить настраиваемые теги (например, то, что @checketts упомянул в ответе), или вы можете создать свою собственную логику, если она слишком сложна, чтобы поместиться в существующую библиотеку. Вы можете экспортировать свои собственные метрики с любой логикой Вы чувствуете себя комфортно
0 голосов
/ 30 апреля 2018

@Timed предназначен для простого добавления таймера. Это может быть полезно, чтобы понять, сколько времени занимает метод, и заставить вас задаться вопросом, почему он занимает больше времени, чем ожидалось. Одни только эти данные сообщат вам, что могут быть выбросы и необходимость их измерять отдельно.

Чтобы получить отдельную информацию, стоит добавить теги, которые могут помочь провести различие между разными таймерами.

Здесь я добавляю тег, основанный на том, сколько итерируется (интервалы могут быть 1, 2-5,> 5)

public void printStudentCourses(int studentId){
   //get student from DB
   // ...
   Metrics.timer("my.timer", Tags.of("bucket", chooseBucket(student.getCourses().size()))).record(() -> {
     for (Course course: student.getCourses()) { 
        //Assuming there is something more expensive worth measuring here
        System.out.println(course);
     }
   })
}
...