首页 > 解决方案 > 使用 Flight Recorder 和 JDK Mission Control 计算更多方法

问题描述

背景

我正在尝试使用 Flight Recorder 检查我的 Java 批处理应用程序以提高启动性能。现在启动大约需要 20 秒,而我正在努力使其不到 10 秒。

该应用程序使用 Spring Boot 2.2 和 Spring Batch 构建,并在 JDK 11 上运行。我使用的是 Flight Recorder 而不是 VisualVM,因为 JDK 11 不包含开箱即用的 VisualVM(在检查环境中安装其他工具并非不可能,但受到限制)。

问题

我认为我可以使用 Flight Recoder 检查启动过程,所以我运行了这样的应用程序:

java -XX:StartFlightRecording=filename=demo.jfr,settings=profile -jar .\build\libs\demo-0.0.1-SNAPSHOT.jar -spring.batch.job.names importUserJob -spring.batch.job.enabled false

但 Mission Control 在“方法分析”面板中仅显示约 100 个计数。了解整个启动过程的趋势并检查哪种方法在该过程中花费的时间最多,这太少了。

问题

如何使用 Flight Recorder 和 JDK Mission Control 获取更多方法计数?文件中的哪个参数.jfc会影响方法计数的数量?

标签: javaperformancejfrjava-mission-control

解决方案


如果您运行的是 JDK 13 或更高版本,则可以将采样模式设置为“Ludicrous”。

它将每毫秒对线程进行一次采样。您可以进入 Window -> Template Manager 并为 Method Profiling 选择“Ludicrous”模式,然后导出 .jfc 文件并使用它启动您的应用程序:

 $ java -XX:StartFlightRecording:settings=/settings/my.jfc ...

或者您可以进入 JAVA_HOME/lib/jfr/ 并将 default.jfc 复制到一个新文件并编辑它显示 jdk.ExecutionSample 的时间段。您可以设置的最小值为 1 毫秒。

开销会增加,但你会得到更多的样本。


推荐阅读