Personalice el comportamiento de inicio del tiempo de ejecución de Java para funciones de Lambda
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.
Cómo entender la variable de entorno JAVA_TOOL_OPTIONS
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: cómo 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)
-
Abra la página Funciones
en la consola de Lambda. -
Elija la función de Java para la que desea personalizar la compilación por niveles.
-
Elija la pestaña Configuración y, a continuación, elija Variables de entorno en el menú de la izquierda.
-
Elija Editar.
-
Elija Add environment variable (Añadir variable de entorno).
-
Para la clave, ingrese
JAVA_TOOL_OPTIONS
. Para el valor, ingrese-XX:+TieredCompilation -XX:TieredStopAtLevel=1
. -
Seleccione 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 serieJAVA_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