Java Lambda 関数のカスタマイズ設定 - AWS Lambda

Java Lambda 関数のカスタマイズ設定

このページでは、AWS Lambda の Java 関数固有の設定について説明します。これらの設定を使用して、Java ランタイムの起動時の動作をカスタマイズできます。これにより、コードを変更することなく、関数全体のレイテンシを低下させ、関数全体のパフォーマンスを向上させることができます。

JAVA_TOOL_OPTIONS 環境変数

Java を使用する場合、Lambda は追加のコマンドライン変数を設定するために、JAVA_TOOL_OPTIONS 環境変数をサポートします。この環境変数は、階層化コンパイル設定のカスタマイズなど、さまざまな方法で使用できます。次の例では、このユースケースで JAVA_TOOL_OPTIONS 環境変数を使用する方法を示します。

例: 階層型コンパイル設定のカスタマイズ

階層型コンパイルとは、Java 仮想マシン (JVM) の機能です。JVM のジャストインタイム (JIT) コンパイラを十分に活用するため、特定の階層型コンパイル設定を使用することができます。通常、C1 コンパイラは起動時間を短縮するように最適化されています。C2 コンパイラは、全体的なパフォーマンスを最大限に高めるように最適化されていますが、メモリの使用量が多く、処理に時間がかかります。

階層型コンパイルには 5 つの異なるレベルがあります。レベル 0 では、JVM は Java バイトコードを解釈します。レベル 4 では、JVM は C2 コンパイラを使用して、アプリケーションの起動時に収集されたプロファイリングデータを分析します。時間の経過とともに、コードの使用状況を監視して最善の最適化方法を特定します。

階層型コンパイルレベルをカスタマイズすると、Java 関数のコールドスタートのレイテンシ低下に役立ちます。例えば、JVM が C1 コンパイラを使用するようにするには、階層型コンパイルのレベルを 1 に設定します。このコンパイラは、最適化されたネイティブコードを迅速に生成しますが、プロファイリングデータは生成せず、C2 コンパイラも使用しません。

Java 17 ランタイムでは、階層化コンパイルの JVM フラグはデフォルトでレベル 1 で停止するように設定されています。Java 11 以前のランタイムでは、次の手順を実行して階層化コンパイルレベルを 1 に設定できます。

階層型コンパイル設定をカスタマイズするには (コンソール)
  1. Lambda コンソールの [関数] ページを開きます。

  2. 階層型コンパイルをカスタマイズする Java 関数を選択します。

  3. [設定] タブを選択し、左側のメニューで [環境変数] を選択します。

  4. [編集] を選択します。

  5. [環境変数の追加] を選択します。

  6. [キー] に、JAVA_TOOL_OPTIONS と入力します。[値] に、-XX:+TieredCompilation -XX:TieredStopAtLevel=1 と入力します。

    JAVA_TOOL_OPTIONS 環境変数を使用して階層型コンパイル設定を追加する方法を示す Lambda コンソールのスクリーンショット。
  7. [保存] をクリックします。

注記

Lambda SnapStart を使用して、コールドスタートの問題を軽減することもできます。SnapStartは、実行環境のキャッシュされたスナップショットを使用して、起動時のパフォーマンスを大幅に向上させます。SnapStartの機能、制限事項、サポートされているリージョンの詳細については、Lambda SnapStart による起動パフォーマンスの向上 を参照してください。

例: JAVA_TOOL_OPTIONS を使用した GC の動作のカスタマイズ

Java 11 ランタイムは、ガベージコレクションにシリアルガベージコレクター (GC) を使用します。デフォルトでは、Java 17 ランタイムもシリアル GC を使用します。ただし、Java 17 では、JAVA_TOOL_OPTIONS 環境変数を使用してデフォルトの GC を変更することもできます。パラレル GC と Shenandoah GC のどちらかを選択できます。

例えば、ワークロードでより多くのメモリと複数の CPU を使用する場合は、パフォーマンス向上のためにパラレル GC の使用を検討してください。そのためには、JAVA_TOOL_OPTIONS 環境変数の値に以下の値を追加します。

-XX:+UseParallelGC