Lambda 関数の Java ランタイムの起動時の動作をカスタマイズする
このページでは、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 に設定できます。
階層型コンパイル設定をカスタマイズするには (コンソール)
-
Lambda コンソールの [関数]
ページを開きます。 -
階層型コンパイルをカスタマイズする Java 関数を選択します。
-
[設定] タブを選択し、左側のメニューで [環境変数] を選択します。
-
[編集] を選択します。
-
[環境変数の追加] を選択します。
-
[キー] に、
JAVA_TOOL_OPTIONS
と入力します。[値] に、-XX:+TieredCompilation -XX:TieredStopAtLevel=1
と入力します。 -
[Save] を選択します。
注記
Lambda SnapStart を使用して、コールドスタートの問題を軽減することもできます。SnapStartは、実行環境のキャッシュされたスナップショットを使用して、起動時のパフォーマンスを大幅に向上させます。SnapStartの機能、制限事項、サポートされているリージョンの詳細については、Lambda SnapStart による起動パフォーマンスの向上 を参照してください。
例: JAVA_TOOL_OPTIONS を使用した GC の動作のカスタマイズ
Java 11 ランタイムは、ガベージコレクションにシリアルJAVA_TOOL_OPTIONS
環境変数を使用してデフォルトの GC を変更することもできます。パラレル GC と Shenandoah GC
例えば、ワークロードでより多くのメモリと複数の CPU を使用する場合は、パフォーマンス向上のためにパラレル GC の使用を検討してください。そのためには、JAVA_TOOL_OPTIONS
環境変数の値に以下の値を追加します。
-XX:+UseParallelGC