是的,這是可能的,它很容易做到,我建議它作爲一個最好的做法,一直做!有數據可用來解釋正在發生的事情,而不需要花費額外的時間來重現問題總是很好的。
我寫了自己的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