是的,这是可能的,它很容易做到,我建议它作为一个最好的做法,一直做!有数据可用来解释正在发生的事情,而不需要花费额外的时间来重现问题总是很好的。
我写了自己的JMH分析器来使用JFR(Java Flight Recorder):JmhFlightRecorderProfiler这将启动JMH分析并在基准测试结束时将数据保存到文件中。您可以使用随JDK提供的Java Mission控件打开此文件。
这里是你如何开始你的基准,并使用它(complete example):
Options opt = new OptionsBuilder()
.include(".*")
.addProfiler(JmhFlightRecorderProfiler.class)
.jvmArgs("-Xmx256m", "-Xms256m", "-XX:+UnlockCommercialFeatures",
"-Djmh.stack.profiles=" + destinationFolder,
"-Djmh.executor=FJP",
"-Djmh.fr.options=defaultrecording=true,settings=" + profile)
.result(destinationFolder + "/" + "benchmarkResults.csv")
.resultFormat(ResultFormatType.CSV)
.warmupIterations(10)
.measurementIterations(10)
.forks(1)
.build();
new Runner(opt).run();
我标准构建过程中运行的基准测试中,我使用Jenkins JMH plugin监视/趋势基准测试结果/建造,如果任何退化观察到我有Benchmark profiles可用于调查潜在的原因。
虽然堆栈分析器不是很好,但perf(或perfasm)分析器对于找出热点位置要好得多。虽然在microbenchmarks中你会看到一小部分代码的影响,并且在任何情况下,perf/asm分析器都会受到打滑(CPU会报告时序可能只是真正的热点)。请注意,perfm/asm仅适用于Linux。 – AlBlue