使用@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);
}
}
当然,打印具有较大课程列表的学生需要更长的时间。
所以:
@Timed
测量中获得什么真正的见解?@Timed
测量添加一些额外信息?答案 0 :(得分:1)
@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);
}
})
}
答案 1 :(得分:0)
@Timer
的用法因应用程序不同而异。我个人用它来衡量servlet请求的运行时间。因此,在这种情况下,您可以获得每个请求的运行时间的高级视图,您可以创建有趣的图表,让您深入了解应用程序的工作方式,如果出现问题,您可以创建警报(使用其他度量标准集合)像普罗米修斯这样的工具。所以回答你的问题: