Configuración de personalización de las funciones de Lambda en Java - AWS Lambda

Configuración de personalización de las funciones de Lambda en Java

En esta página, se describe la configuración específica de las funciones de Java en AWS Lambda. Puede utilizar esta configuración para personalizar el comportamiento de inicio del tiempo de ejecución de Java. Esto puede reducir la latencia general de las funciones y mejorar su rendimiento general, sin tener que modificar ningún código.

JAVA_TOOL_OPTIONS variable de entorno

En Java, Lambda admite la variable de entorno JAVA_TOOL_OPTIONS para establecer variables de línea de comandos adicionales. Puede utilizar esta variable de entorno de varias maneras, como para personalizar la configuración de compilación por niveles. En el siguiente ejemplo, se muestra cómo utilizar la variable de entorno JAVA_TOOL_OPTIONS en este caso de uso.

Ejemplo: personalizar la configuración de compilación por niveles

La compilación por niveles es una característica de la máquina virtual Java (JVM). Puede utilizar configuraciones específicas de compilación por niveles para aprovechar al máximo la compilación en tiempo de ejecución (JIT) de la JVM. Por lo general, el compilador C1 está optimizado para un inicio rápido. El compilador C2 está optimizado para obtener el mejor rendimiento general, pero también utiliza más memoria y tarda más en lograrlo.

Hay 5 niveles diferentes de compilación por niveles. En el nivel 0, la JVM interpreta el código de bytes de Java. En el nivel 4, la JVM usa el compilador C2 para analizar los datos de creación de perfiles recopilados durante el inicio de la aplicación. Con el tiempo, monitorea el uso del código para identificar las mejores optimizaciones.

La personalización del nivel de compilación por niveles puede ayudarlo a reducir la latencia de inicio en frío de la función de Java. Por ejemplo, defina el nivel de compilación por niveles en 1 para que la JVM utilice el compilador C1. Este compilador produce rápidamente código nativo optimizado, pero no genera ningún dato de creación de perfiles y nunca usa el compilador C2.

En el tiempo de ejecución de Java 17, el indicador de JVM para la compilación por niveles está configurado para detenerse en el nivel 1 de forma predeterminada. Para el tiempo de ejecución de Java 11 y versiones anteriores, puede establecer el nivel de compilación por niveles en 1 mediante los siguientes pasos:

Para personalizar la configuración de compilación por niveles (consola)
  1. Abra la página Funciones en la consola de Lambda.

  2. Elija la función de Java para la que desea personalizar la compilación por niveles.

  3. Elija la pestaña Configuración y, a continuación, elija Variables de entorno en el menú de la izquierda.

  4. Elija Editar.

  5. Elija Add environment variable (Añadir variable de entorno).

  6. Para la clave, ingrese JAVA_TOOL_OPTIONS. Para el valor, ingrese -XX:+TieredCompilation -XX:TieredStopAtLevel=1.

    Una captura de pantalla de la consola de Lambda que muestra cómo agregar configuraciones de compilación por niveles mediante la variable de entorno JAVA_TOOL_OPTIONS.
  7. Elija Guardar.

nota

También puede utilizar Lambda SnapStart para mitigar los problemas de arranque en frío. SnapStart utiliza instantáneas almacenadas en caché de su entorno de ejecución para mejorar de forma significativa el rendimiento de inicio. Para obtener más información sobre las características, las limitaciones y las regiones admitidas de SnapStart, consulte Mejora del rendimiento de inicio con Lambda SnapStart.

Ejemplo: personalización del comportamiento de GC mediante JAVA_TOOL_OPTIONS

Los tiempos de ejecución de Java 11 utilizan el recopilador de elementos no utilizados (GC) en serie para la recopilación de elementos no utilizados. De forma predeterminada, los tiempos de ejecución de Java 17 también utilizan el GC en serie. Sin embargo, con Java 17 también puede usar la variable de entorno JAVA_TOOL_OPTIONS para cambiar el GC predeterminado. Puede elegir entre el GC en paralelo y el GC Shenandoah.

Por ejemplo, si su carga de trabajo utiliza más memoria y varias CPU, considere la posibilidad de utilizar el GC en paralelo para obtener un mejor rendimiento. Para ello, agregue lo siguiente al valor de la variable de entorno JAVA_TOOL_OPTIONS:

-XX:+UseParallelGC