Java Lambda 函数自定义设置 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Java Lambda 函数自定义设置

本页将介绍特定于 Amazon Lambda 中 Java 函数的设置。您可以使用这些设置来自定义 Java 运行时系统启动行为。这样可以减少总体函数延迟并提高总体函数性能,而无需修改任何代码。

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:

自定义分层编译设置(控制台)
  1. 在 Lambda 控制台中打开函数页面。

  2. 选择要为其自定义分层编译的 Java 函数。

  3. 选择配置选项卡,然后从左侧菜单中选择环境变量

  4. 选择编辑

  5. 选择 Add environment variable (添加环境变量)

  6. 对于键,输入 JAVA_TOOL_OPTIONS。对于值,输入 -XX:+TieredCompilation -XX:TieredStopAtLevel=1

    
              Lambda 控制台的屏幕截图,演示如何使用 JAVA_TOOL_OPTIONS 环境变量添加分层编译设置。
  7. 选择保存

注意

您也可以使用 Lambda SnapStart 来缓解冷启动问题。SnapStart 使用执行环境的缓存快照来显著提高启动性能。有关 SnapStart 的功能、限制和支持的区域的更多信息,请参阅 使用 Lambda 提高创业绩效 SnapStart

示例:使用 JAVA_TOOL_OPIONS 自定义 GC 行为

Java 11 运行时系统使用串行垃圾收集器(GC)实现垃圾回收。默认情况下,Java 17 运行时系统也使用串行 GC。不过,在 Java 17 中,您也可以使用 JAVA_TOOL_OPTIONS 环境变量来更改默认 GC。您可以在 Parallel GC 和 Shenandoah GC 之间进行选择。

例如,如果工作负载会使用更多内存和多个 CPU,则考虑使用 Parallel GC 来获得更好的性能。为此,您可以将以下内容附加到 JAVA_TOOL_OPTIONS 环境变量的值中:

-XX:+UseParallelGC