4

我需要测量应用程序特定部分的性能。为了计算这些度量,我使用 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会允许这样做,但是如果我可以避免添加新库,那就太好了……

4

1 回答 1

0

我不知道 Spring 中有任何此类课程

如果您不想添加 Perf4J,我会封装到您自己的类中。

一个通用的统计类是一个方便的东西。只要确保它是线程安全的。

于 2012-06-07T13:19:21.790 回答