Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用@Timed annotation对方法计时-与输入大小相关_Java_Spring Boot_Graphite_Micrometer - Fatal编程技术网

Java 使用@Timed annotation对方法计时-与输入大小相关

Java 使用@Timed annotation对方法计时-与输入大小相关,java,spring-boot,graphite,micrometer,Java,Spring Boot,Graphite,Micrometer,使用@Timed注释,我们可以计算方法运行所需的时间: @Timed public void loopInput(int counter){ for (int i = 0; i < counter; i++){ i++; } } 当然,用更大的课程列表打印学生需要更长的时间 因此: 我们可以从@定时测量中获得哪些真正的见解 有没有办法为@Timed测量添加一些附加信息 @Timed是一种添加计时器的简单方法。这有助于了解一种方法需要多长时间,并让您质疑为

使用
@Timed
注释,我们可以计算方法运行所需的时间:

@Timed 
public void loopInput(int counter){
    for (int i = 0; i < counter; i++){
        i++;
    }
}
当然,用更大的课程列表打印学生需要更长的时间

因此:

  • 我们可以从
    @定时测量中获得哪些真正的见解
  • 有没有办法为
    @Timed
    测量添加一些附加信息

  • @Timed
    是一种添加计时器的简单方法。这有助于了解一种方法需要多长时间,并让您质疑为什么它需要比预期更长的时间。单凭这些数据就可以告诉您,可能存在异常值,需要单独测量这些异常值

    为了获得独立的见解,添加有助于区分不同计时器的标记是值得的

    在这里,我添加了一个基于迭代次数的标记(bucket可能是1,2-5,>5)


    @Timer
    的用法因不同的应用程序而异。我个人使用它来测量servlet请求的运行时间。因此,在本例中,您可以获得每个请求的运行时间的高级视图,并可以创建有趣的图表,让您了解应用程序的工作方式,如果出现问题,您可以创建警报(使用其他度量收集工具,如Prometheus)。因此,要回答您的问题:

  • 您可以测量函数随时间变化的时间(不关心输入大小)、创建直方图、监视应用程序运行状况
  • 一种解决方案是添加自定义标记(如回答中提到的@checketts),或者如果逻辑太复杂而无法放入现有库中,您可以创建自己的逻辑。您可以使用自己喜欢的任何逻辑导出自己的度量

  • 因此,似乎@Timed本身并没有提供足够的信息。我们需要收集更多的信息,以便从中获得真正的见解。这不是真的吗?不一定。可以在代码中插入标记,但也可以在外部添加标记。例如,普罗米修斯添加了“实例id”、“作业”和其他“静态”信息。对于每个事务都会更改的内容,您必须使用自己的计时器(而不是@Timed)
        @Timed
        public void printStudentCourses(int studentId){
           //get student from DB
           // ...
           for (Course cource: Student.getCourses()) {
              System.out.println(cource);
           }
        }
    
    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);
         }
       })
    }