我需要测量应用程序特定部分的性能。为了计算这些度量,我使用 SpringStopWatch
类。在一个方法中,有一个循环,我需要测量每次迭代的执行情况。
对于循环部分,我想要的是有一个计数器和最小值/最大值/平均值。不幸的是,SpringStopWatch
类没有提供这样的功能。
例如,下面的代码:
StopWatch watch = new StopWatch("foo");
watch.start("First process");
doSomething();
watch.stop();
for (int i = 0; i < 10; i++) {
watch.start("loop");
doAnotherThing();
watch.stop();
}
System.out.println(watch.prettyPrint());
将输出:
StopWatch 'foo': running time (millis) = 1469
-----------------------------------------
ms % Task name
-----------------------------------------
01000 068% First process
00078 005% loop
00000 000% loop
00016 001% loop
00047 003% loop
00015 001% loop
00047 003% loop
00094 006% loop
00000 000% loop
00109 007% loop
00063 004% loop
我想要的是:
StopWatch 'foo': running time (millis) = 1469
-----------------------------------------
ms % Task name
-----------------------------------------
01000 068% First process
00469 032% loop | min: 0 ; max: 109 ; average: 47 ; count: 10
有没有办法使用 Spring 实现这一目标?
ps:我知道perf4j会允许这样做,但是如果我可以避免添加新库,那就太好了……