Nota:
- Este tutorial está disponible en un entorno de prácticas gratuitas proporcionado por Oracle.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por valores específicos de su entorno en la nube.
Acelere las aplicaciones en Oracle Cloud con GraalVM Enterprise
Introducción
GraalVM Enterprise es una distribución de JDK de alto rendimiento, basada en Oracle Java SE seguro y de confianza, que proporciona mejoras significativas en la ejecución y eficiencia de las aplicaciones.
GraalVM Enterprise se incluye en Oracle Java SE Subscription y está disponible sin costo en Oracle Cloud Infrastructure (OCI)
GraalVM Enterprise ofrece dos formas de ejecutar aplicaciones Java: en JVM HotSpot o como ejecutable nativo compilado previo. Cuando se ejecuta en JVM HotSpot, GraalVM Enterprise emplea el compilador de Graal como compilador JIT de nivel superior. El compilador realiza una optimización avanzada y aplica técnicas en línea agresivas para acelerar el rendimiento de cualquier aplicación, sin ningún cambio de código. La ejecución como una instancia nativa ejecutable de GraalVM Enterprise utiliza Native Image para transformar una aplicación Java en un ejecutable nativo independiente que no necesita que se ejecute una JVM, se inicie instantáneamente y proporcione un rendimiento máximo sin tiempo de calentamiento.
En este laboratorio, ejecutará proyectos de demostración en una JVM y como ejecutables nativos para comparar el rendimiento y ver cómo GraalVM Enterprise puede acelerar las aplicaciones en OCI. Las aplicaciones más rápidas con menores requisitos de recursos se traducen en menos servidores o en menos servidores, lo que reduce los costos en la nube.
Contenido del laboratorio
En este laboratorio:
- Conéctese a una instancia de VM en Oracle Cloud donde realizará el laboratorio con GraalVM Enterprise ya disponible
- Ejecutar una referencia de rendimiento de JMH
- Genere un ejecutable nativo para una aplicación Micronaut y ejecútelo
- Configure el firewall del host para permitir el tráfico a su instancia de VM (opcional).
Tiempo de laboratorio estimado: 30 minutos
NOTA: Siempre que vea el icono de portátil, deberá realizar una acción, como introducir un comando o editar un archivo.
![]()
# The box under the icon will tell you what to do.
Para copiar un comando, pase el cursor sobre el campo y, a continuación, haga clic en el ícono de copia en el portapapeles.
Para pegar un comando copiado en una ventana de terminal, haga clic con el botón derecho y seleccione la opción Paste en el menú contextual. Si prefiere métodos abreviados de teclado en su lugar, utilice CTRL+SHIFT+V.
Tarea 1: Conectarse a una instancia de VM en Oracle Cloud
Al iniciar el laboratorio, se aprovisionan los recursos necesarios en segundo plano: red virtual en la nube (VCN), instancia informática con la imagen incorporada de Oracle Linux 8. El aprovisionamiento de recursos también incluye la instalación y configuración del entorno de tiempo de ejecución de GraalVM Enterprise con Native Image para mantener este laboratorio conciso y ahorrar tiempo. El aprovisionamiento puede tardar unos 5 minutos en realizarse. Puede saber cuándo están totalmente aprovisionados y listos los recursos consultando el separador Recursos de la página web Luna Lab (consulte el paso 1, a continuación).
-
Haga doble clic en el icono Luna Lab en el escritorio para abrir el explorador.

Espere hasta que el engranaje animado, además de los recursos, se convierta en una marca de verificación. Esto significa que se aprovisionan todos los recursos informáticos y de red necesarios y puede continuar.

-
Haga clic en el separador Recursos de la página Laboratorio de Luna. En la página Recursos se muestra el nombre y la dirección IP pública de una instancia de VM aprovisionada por usted.
-
Copie la dirección IP pública del cuadro SERVER_IP. Es necesario hacer clic en
View Details. Para copiar, pase el cursor sobre el campo y, a continuación, haga clic en el icono Copiar al portapapeles.
-
Minimice la ventana del explorador para que pueda ver Luna Desktop. Haga clic en el menú Aplicaciones y abra un emulador de terminal.

-
Introduzca el comando de conexión SSH donde
es la dirección IP pública de la instancia de VM: 
ssh opc@<SERVER_IP>Acepte la huella de la clave ECDSA escribiendo
yesen la petición de datos.
Ahora está conectado a una instancia de VM en Oracle Cloud. Su instancia de VM ya está preconfigurada con GraalVM Enterprise y las herramientas de Native Image necesarias para este laboratorio. Puede comprobar fácilmente si ejecuta estos comandos:
![]()
java -version
![]()
native-image --version
Si desea aprender a instalar GraalVM Enterprise y sus funciones en Oracle Linux, ejecute el laboratorio Introducción a GraalVM en Oracle Linux cuando finalice este laboratorio.
Puede continuar con la siguiente tarea.
Tarea 2: ejecutar demostraciones: plantilla de Microbenchmark (JMH) de Java
En esta parte, ejecutará una referencia de Java para comparar el rendimiento del compilador en modo JIT de GraalVM Enterprise con el compilador en modo JIT de C2. El compilador Graal, activado por defecto en GraalVM Enterprise, proporciona rendimiento optimizado para programas que se ejecutan en JVM mediante enfoques únicos para el análisis de código, optimizaciones avanzadas y realiza un algoritmo de línea de comandos muy agresivo para jerarquías de clase profunda y amplia.
La referencia que va a ejecutar se escribe con Java Microbenchmark Harness (JMH) y utiliza Java Stream API. Ilustra el análisis en línea y de escape parcial que el compilador realiza conjuntamente, lo que explica las mejoras de rendimiento significativas en tiempo de ejecución.
El código de origen de demostración está disponible en el directorio java-simple-stream-benchmark.
El microbenchmark crea un flujo a partir de elementos de matriz y asigna cada número mediante varias funciones de asignación:
public class JavaSimpleStreamBenchmark {
static int[] values = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
@Benchmark
public int testMethod() {
return Arrays.stream(values)
.map(x -> x + 1)
.map(x -> x * 2)
.map(x -> x + 2)
.reduce(0, Integer::sum);
}
}
JavaSimpleStreamBenchmark.testMethod se ejecuta con 3 iteraciones para permitir que el compilador JIT se calcule antes de muestrear el rendimiento. Los resultados de referencia se imprimen en la consola y se encuentran en nanosegundos por operación, lo que significa que los números más bajos son mejores.
-
En la ventana de terminal conectada a la instancia de VM, vaya al directorio de demostración:

cd java-simple-stream-benchmark -
El proyecto de referencia se crea con Maven, pero no incluye un envoltorio de Maven (
.mvnw) y Oracle Linux no incluye Maven por defecto. Instale Maven conyum:
sudo yum install maven -
Crear el proyecto:

mvn package -
Ejecute la referencia con el compilador en modo JIT de GraalVM Enterprise:

java -jar target/benchmarks.jarAl llamar al comando
java, se utiliza el compilador JIT de Graal optimizado activado en GraalVM Enterprise de forma predeterminada. -
Ejecute la referencia en la misma JVM (GraalVM Enterprise), pero utilice el compilador C2 en lugar del compilador de Graal aplicando la opción
-XX:-UseJVMCICompiler:
java -XX:-UseJVMCICompiler -jar target/benchmarks.jar
Compare los resultados de la referencia después de completar los pasos 4-5. Por supuesto, los resultados dependerán del número de procesadores y la memoria de la instancia de VM. A continuación se muestran los números tomados en una instancia informática con la unidad VM.Standard.2-2 y 30 GB de memoria:
Compilador JIT de Graal:
[opc@demo-instance java-simple-stream-benchmark]$ java -jar target/benchmarks.jar
...
Benchmark Mode Cnt Score Error Units
JavaSimpleStreamBenchmark.testMethod avgt 3 53.474 ? 1236.199 ns/op
Compilador JIT de C2:
[opc@demo-instance java-simple-stream-benchmark]$ java -XX:-UseJVMCICompiler -jar target/benchmarks.jar
...
Benchmark Mode Cnt Score Error Units
JavaSimpleStreamBenchmark.testMethod avgt 3 361.844 ? 37.120 ns/op
El resultado medio del compilador de JIT de Graal es más de 5 veces más rápido que el de C2 en la misma referencia.
Puede continuar con la siguiente tarea.
Tarea 3: ejecutar demostraciones: ejecutable de Micronaut Native Linux
Esta tarea se centrará en comparar los tiempos de inicio al ejecutar un microservicio Java en una JVM y como ejecutable nativo. En ambos casos, el microservicio se ejecutará en GraalVM Enterprise, pero se ejecutará en diferentes modos: compilado justo a tiempo o con antelación, para demostrar la mejora del inicio.
Este microservicio se escribe con Micronaut, un marco Java de pila completa adecuado para crear microservicios y aplicaciones sin servidor. Es una aplicación de presentación simple del servidor, donde el servicio, ConferenceService.java, contiene una lista de conferencias y devuelve una conferencia aleatoria. El controlador se define con la anotación @Controller y se asigna a la ruta /conferences para obtener un nombre de conferencia aleatorio. Micronaut la convierte automáticamente en JSON en la respuesta.
-
Vuelva al directorio raíz:

cd -
Cree una aplicación Micronaut que especifique herramientas de creación de Maven o Gradle, descargue los orígenes de la aplicación, descomprima el archivo y navegue hasta él.

mkdir micronaut-demo && cd micronaut-demoMaven:

curl https://guides.micronaut.io/latest/micronaut-creating-first-graal-app-maven-java.zip -o micronaut-creating-first-graal-app.zipGradle:

curl https://guides.micronaut.io/latest/micronaut-creating-first-graal-app-gradle-java.zip -o micronaut-creating-first-graal-app.zipDescargará la versión Micronaut 3.0.x.

unzip micronaut-creating-first-graal-app.zip -
Cree y ejecute la aplicación con Gradle o Maven Wrapper en JVM (GraalVM Enterprise).
Maven:

./mvnw mn:runGradle:

./gradlew runLa aplicación se inicia en el puerto 8080. Tenga en cuenta el tiempo necesario para iniciar este simple microservicio Micronaut.

-
Para terminar la aplicación, escriba
CTRL+C. -
Genere un ejecutable nativo de Linux independiente con Native Image. Puede crear un ejecutable nativo con Gradle o Maven.
Maven especificando el formato de empaquetado
native-image:
./mvnw package -Dpackaging=native-imageGradle ejecutando la tarea
nativeImagedel proyecto Micronaut:
./gradlew nativeImageSi ha utilizado Maven, el ejecutable denominado
micronautguidese escribirá en el directorio target/ del proyecto de forma predeterminada o en el directorio build/native-image/ denominadoapplicationsi ha utilizado Gradle.Nota: El tiempo que se tarda en crear un ejecutable depende del tamaño y la complejidad de la aplicación y puede tardar algún tiempo en usar máquinas virtuales con baja energía.
-
Llame al ejecutable.
Creado con Maven:

./target/micronautguideCreado con Gradle:

./build/native-image/applicationUna vez más, tenga en cuenta el tiempo que se tarda en iniciar este microservicio como ejecutable nativo. Se inicia mucho más rápido porque el ejecutable es un binario independiente y no requiere que se ejecute un JDK, lo que hace que sea una forma fácil de distribuir las aplicaciones. El tamaño de archivo también es bastante pequeño.

-
Para terminar la aplicación, escriba
CTRL+C.
GraalVM Native Image crea un ejecutable nativo con las clases de aplicación, clases de biblioteca dependientes, clases de JDK dependientes y una instantánea de la pila de aplicaciones con clases inicializadas en el momento de la creación. La ejecución de una aplicación Java como ejecutable nativo proporciona inicio instantáneo, menos consumo de CPU y memoria, lo que convierte al entorno de tiempo de ejecución de GraalVM Enterprise en un buen candidato para despliegues en la nube.
Ya ha visto la diferencia en los tiempos de inicio y ya puede finalizar esta práctica. Sin embargo, puede continuar y probar esta aplicación del servidor que se ejecuta en un explorador que requiere la configuración del firewall del host para permitir el tráfico a su instancia de VM. Continúe con la tarea 4.
Tarea 4: Configurar el firewall del host permite el tráfico a una instancia de VM (opcional)
Para probar la aplicación del servidor anterior en un explorador, debe asegurarse de que el firewall del host permita el tráfico a la máquina virtual.
-
Conéctese a consola de OCI. Abra la página Luna Lab y haga clic en el enlace rápido Consola de OCI. Introduzca el nombre de usuario y la contraseña proporcionados en Credenciales para esta cuenta efímera de prácticas.

-
Cuando se haya conectado a la consola de OCI, vaya a Recursos informáticos y haga clic en Instancias.

-
Seleccione un compartimento necesario en la lista desplegable Compartimento de la izquierda. Para buscar el nombre del compartimento, vuelva a la página Luna Lab y, a continuación, haga clic en Oracle Cloud y consulte el campo Nombre del compartimento.

-
Busque la instancia de VM en la vista principal y ábrala.
-
En la sección VNIC primaria, haga clic en Subred a la que está asociada la instancia.
-
En la página de subred, haga clic en la lista de seguridad (nombre que comienza con ds-luna-seclist-).
-
Pulse Agregar regla de entrada y rellene los siguientes datos:

La regla permite que el tráfico de todos los orígenes utilice el puerto 8080, de modo que se pueda acceder a la aplicación desde cualquier lugar.
-
Vuelva a la ventana de terminal y ejecute los siguientes comandos para reiniciar el firewall en la instancia de VM en ejecución.

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo systemctl reload firewalld -
Reinicie la aplicación:
Creado con Maven:

./target/micronautguideCreado con Gradle:

./build/native-image/application -
Abra la aplicación en un explorador,
http://<SERVER_IP>:8080/conferences/random, donde<SERVER_IP>es la dirección IP pública de la instancia. Debido a que la anotación Micronaut@Controllerestá asignada a la ruta/conferences, debe agregar la ruta/conferences/randoma la URL.http://<SERVER_IP>:8080/conferences/random -
(Opcional) Abra una nueva ventana de Termianl y envíe una solicitud GET con
curl:
curl http://<SERVER_IP>:8080/conferences/random
felicitaciones Ha finalizado correctamente esta práctica.
Más información
- Realice este laboratorio para obtener más información sobre cómo instalar GraalVM Enterprise y sus funciones en Oracle Linux.
- Disfrute de una experiencia de laboratorio práctica con GraalVM Native Image y empiece a crear aplicaciones Java nativas en la nube ejecutando el laboratorio de inicio rápido de GraalVM Native Image.
- Consulte la documentación de GraalVM Enterprise
- Visite la página del producto en oracle.com
Para terminar esta sesión, haga clic en el botón End Session de la barra de herramientas.
Más recursos de aprendizaje
Explore otras prácticas en docs.oracle.com/learn o acceda a contenido de aprendizaje más gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de formación de Oracle.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Accelerate Applications in OCI with GraalVM Enterprise
F54875-01
March 2022
Copyright © 2022, Oracle and/or its affiliates.