2017-05-03 110 views
1

我想写性能测试使用jmh来测量我的应用程序的代码的一些部分。我已阅读jmh samples关于如何编写测试,并在YouTube上观看关于jmh和性能测试的一些会谈。如何选择jmh配置参数

我不明白的是如何为@Warmup,@Measurement@Fork值选择正确的值。在大多数样本中,它是1叉,10次迭代,持续时间为1秒。

我明白,配置没有银弹,但我应该怎样选择我应该选择的值?

回答

1

我不知道是否有人可以推荐实际上尽可能接近你的参数 - 甚至可能不是写这个工具的人。这是用不同的参数非常具体到您正在测试使用的情况下,操作系统的JVM等

我个人做了几次,每次拍摄的结果,这样我可以分析它。你有一些错误+/-(至少平均时间)字段,这是我的第一个迹象。如果它太大(这是你会确定的),我通常会增加@Warmup@Measurement;这不是一个黄金法则,但这是我所做的。下面是一个示例使用:

@BenchmarkMode(Mode.AverageTime) 
@OutputTimeUnit(TimeUnit.NANOSECONDS) 
@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) 
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) 
@State(Scope.Thread) 

我可能会增加iterationstime一点一点地看,如果我得到接近与以前的运行不断取得成果。

我通常在相同的热身下运行所有​​的基准,所以结果不会偏颇。

到这里的事情是,你可能会得到好的或坏的结果,或者缓慢和快速 - 但那只是输出,不是原因。了解原因并运行jmh根据perfasmxperfasm和许多其他分析器,是一个完全不同的厨房,出我的联盟的方式...