自定义 Lambda 函数的 Java 运行时启动行为
本页将介绍特定于 AWS Lambda 中 Java 函数的设置。您可以使用这些设置来自定义 Java 运行时系统启动行为。这样可以减少总体函数延迟并提高总体函数性能,而无需修改任何代码。
Sections
了解 JAVA_TOOL_OPTIONS
环境变量
在 Java 中,Lambda 支持 JAVA_TOOL_OPTIONS
环境变量以在 Lambda 中设置其他命令行变量。您可以通过多种方式使用此环境变量,例如自定义分层编译设置。下一个示例演示了如何针对此使用案例使用 JAVA_TOOL_OPTIONS
环境变量。
示例:自定义分层编译设置
分层编译是 Java 虚拟机(JVM)的一项功能。您可以使用特定的分层编译设置来充分利用 JVM 的即时(JIT)编译器。通常,C1 编译器经过优化,可缩短启动时间。C2 编译器经过优化以获得最佳整体性能,但它也会占用更多内存,并且需要更长的时间才能实现。
分层编译有 5 个不同级别。在级别 0 上,JVM 解释 Java 字节代码。在级别 4 上,JVM 使用 C2 编译器来分析在应用程序启动期间收集的分析数据。随着时间的推移,它会监控代码使用情况以确定最佳优化。
自定义分层编译级别可以帮助您减少 Java 函数冷启动延迟。例如,将分层编译级别设置为 1 以让 JVM 使用 C1 编译器。该编译器可以快速生成优化原生代码,但它不生成任何分析数据,也从不使用 C2 编译器。
在 Java 17 运行时系统中,用于分层编译的 JVM 标志默认设置为在级别 1 停止。对于 Java 11 及以下的运行时系统,可以通过执行如下步骤将分层编译级别设置为 1:
自定义分层编译设置(控制台)
-
在 Lambda 控制台中打开函数
页面。 -
选择要为其自定义分层编译的 Java 函数。
-
选择配置选项卡,然后从左侧菜单中选择环境变量。
-
选择编辑。
-
选择 Add environment variable (添加环境变量)。
-
对于键,输入
JAVA_TOOL_OPTIONS
。对于值,输入-XX:+TieredCompilation -XX:TieredStopAtLevel=1
。 -
选择保存。
注意
您也可以使用 Lambda SnapStart 来缓解冷启动问题。SnapStart 使用执行环境的缓存快照来显著提高启动性能。有关 SnapStart 的功能、限制和支持的区域的更多信息,请参阅 使用 Lambda SnapStart 提高启动性能。
示例:使用 JAVA_TOOL_OPIONS 自定义 GC 行为
Java 11 运行时系统使用串行JAVA_TOOL_OPTIONS
环境变量来更改默认 GC。您可以在 Parallel GC 和 Shenandoah GC
例如,如果工作负载会使用更多内存和多个 CPU,则考虑使用 Parallel GC 来获得更好的性能。为此,您可以将以下内容附加到 JAVA_TOOL_OPTIONS
环境变量的值中:
-XX:+UseParallelGC