Blog chevron_right Performance

如何训练 ReadyNow 以实现最佳 Java 性能

How to Train ReadyNow to Achieve Optimal Java Performance

这是关于使用 ReadyNow 加快 Java 应用程序预热系列的第三篇博文。如果您还没有关注本系列,请回到第一篇博文更快的 Java 预热:CRaC ReadyNow,补看一下相关内容。这篇文章解释了如何训练 Azul Platform Prime 中的 ReadyNow 功能以实现最佳 Java 性能。

使用单次运行生成的配置文件日志只是 Java 预热的第一步。ReadyNow 从以前的执行中学习,并在每次新的调用时逐步改善预热时间。通过多次训练运行,您可以进一步提高应用程序的性能。ReadyNow 从训练运行中收集数据并将其存储在配置文件日志中,从而确保第一次和后续运行后获得更好的性能。

了解 ReadyNow 的各代产品

使用 ReadyNow 时,如果您对应用程序执行多次训练运行以生成最佳配置文件,您将获得最佳结果。您必须对每个新的应用程序构建版本执行此操作,以确保配置文件日志与修改或扩展的代码一致。

当您的应用程序在生产环境中运行时,其每次运行之间可能会存在很大的差异。这主要是由处理“真实环境下的流量”所导致的,而这可能与您的测试或训练环境有所不同。通过执行多次训练运行,您可以帮助增加分析覆盖率,以生成更能代表生产环境中预期应用程序运行的最终分析结果。

例如,为了为名为 MyApp-v1.5 的应用程序实例生成良好的配置文件,您可以对应用程序执行三次训练运行,以记录三代 ReadyNow 配置文件日志。您在没有输入文件的情况下开始第一次运行,并在每次后续训练运行中使用输出文件。

您需要确保每次训练运行的输出都满足最低标准,才能将其提升为下一级别的输入。这些提升标准可以是:

  • 训练运行的时长
  • 候选配置文件日志的大小

您可以根据预期应用程序运行的已知属性来定义这些标准,以判断收集到的 ReadyNow 配置文件是否具有足够的代表性。您可以使用一些基本统计数据,例如配置文件日志时长、文件大小、记录的编译数量、记录的类数量等。如果这些数字与应用程序运行统计数据非常接近,则可以断定该配置文件可能足够成熟。例如,如果您的应用程序每 24 小时重启一次并加载 5 万个类,您也希望 ReadyNow 配置文件中加载的类数量相同。

提示
使用 Optimizer Hub 的 ReadyNow Orchestrator 功能时,会自动创建提升的配置文件。本系列的下一篇博文将对此进行解释。

可行的方法

根据您的目标和约束条件,可以采用不同的方法来训练 ReadyNow 配置文件。

提示
为了获得最佳配置文件,每次运行至少需要对所有关键应用程序方法执行 10,000 次。

最佳方法(预生产环境)

按照此方法生成配置文件,以最大限度地减少或消除生产环境中的学习。

在预生产环境中通过两次单独的运行来训练配置文件。执行应用程序的第一次运行,直到其达到最佳性能。使用刚刚生成的配置文件重新启动 JVM 进行第二次运行,然后再次运行应用程序,直到其达到最佳性能。

# First run
-XX:ProfileLogOut=first-run.log

# Second run
-XX:ProfileLogIn=first-run.log -XX:ProfileLogOut=profile.log

生成的配置文件日志 (`profile.log`) 是您需要在生产系统中使用的日志。

基本方法(预生产环境)

如果 ReadyNow 的训练时间有限,请使用以下命令行选项在预生产环境中运行一次应用程序:

-XX:ProfileLogOut=profile.log

这将获取到一份非常好的配置文件,但在生产运行的第一天可能会出现一些异常值。但这种情况会在后续运行中得到改善。

无配置文件方法(生产环境)

如果您无法在预生产环境中创建配置文件,请使用以下命令行选项允许其在生产环境中学习:

-XX:ProfileLogIn=profile.log -XX:ProfileLogOut=profile.log

这会导致生产环境中首次运行的预热效果不佳,但由于它会重复使用相同的文件作为输入,因此在后续运行中可以获得更好的性能。

了解训练是否充分

为了验证 ReadyNow 训练的充分性,请检查是否存在异常值。没有异常值表明训练进展顺利。启动延迟的减少也证明配置文件日志中收集了足够的训练数据。否则,需要进行更多次运行来增强配置文件内容并获得完全优化的配置文件日志。

在本系列的后续文章中,我们将分析配置文件日志和垃圾收集器日志的示例,以识别可能影响应用程序性能或预热时长的常见问题和配置错误(无论是否使用 ReadyNow)。

结语

使用多次训练运行可以生成更好的配置文件日志,从而提高 Java 应用程序的性能。即使无法执行任何训练运行,将生产环境中首次运行的编译器决策存储在配置文件日志中也能提高后续运行的性能。

下一篇:ReadyNow 中 Optimizer Hub 的作用