java - 使用 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
会影响方法计数的数量?
解决方案
如果您运行的是 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 毫秒。
开销会增加,但你会得到更多的样本。
推荐阅读
- reactjs - 如何在 manifest.json 中使用数据库值
- mapbox - Geojson 数据不会在 Mapbox gl js 上呈现(尽管它适用于 mapbox studio)
- dialogflow-es - 如何从 dialogflow 内联编辑器迁移到 webhook
- mysql - 如何处理 mySQL 中未来孤立记录的删除
- c# - 在 DUMP 文件调试期间找不到 String.cs
- python - 两个variables_difficulty实现的散点图大小相同
- shell - 将两个 csv 文件合并为单独的工作表
- javascript - 按关键字搜索
- python - glob 无法从命令行变量中提取所有文件
- laravel - 无法获得工匠队列:在 Elastic Beanstalk (Laravel/Redis) 上使用主管处理作业