自訂 Lambda 函數的 Java 執行時期啟動行為 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

自訂 Lambda 函數的 Java 執行時期啟動行為

本頁說明 AWS 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_OPTIONS 自訂 GC 行為

Java 11 執行期使用串行垃圾回收器 (GC) 進行垃圾回收。依預設,Java 17 執行期也會使用串行垃圾回收器。但是,對於 Java 17,您也可以使用 JAVA_TOOL_OPTIONS 環境變數來變更預設垃圾回收器。可以在並行垃圾回收器和 Shenandoah 垃圾回收器之間進行選擇。

例如,如果工作負載使用更多記憶體和多個 CPU,則請考慮使用並行垃圾回收器以獲得更好的效能。可以透過將下列內容附加到 JAVA_TOOL_OPTIONS 環境變數的值來執行此操作:

-XX:+UseParallelGC