Nota:
- Questa esercitazione è disponibile in un ambiente di laboratorio gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti Oracle Cloud Infrastructure. Al termine del laboratorio, sostituire questi valori con quelli specifici del tuo ambiente cloud.
Accelera le applicazioni in Oracle Cloud con GraalVM Enterprise
Introduzione
GraalVM Enterprise è una distribuzione JDK altamente performante, costruita su Oracle Java SE affidabile e sicura, che offre notevoli miglioramenti a livello di esecuzione ed efficienza delle applicazioni.
GraalVM Enterprise è incluso in Oracle Java SE Subscription e disponibile gratuitamente su Oracle Cloud Infrastructure (OCI)
GraalVM Enterprise offre due modi per eseguire le applicazioni Java: sulla JVM HotSpot o come exectuable nativo compilato in anticipo. Quando viene eseguito sulla JVM HotSpot, GraalVM Enterprise utilizza il compilatore Graal come compilatore JIT di livello superiore. Il compilatore esegue l'ottimizzazione avanzata e applica tecniche di inline aggressive per accelerare le prestazioni di qualsiasi applicazione, senza modifiche del codice. L'esecuzione come exectuable GraalVM Enterprise nativa utilizza Native Image per trasformare un'applicazione Java in un eseguibile nativo autocontenuto che non richiede l'esecuzione di una JVM, inizia immediatamente e garantisce prestazioni di picco senza tempi di riscaldamento.
In questo laboratorio verranno eseguiti progetti demo su una JVM e come elementi esistenti nativi per confrontare le prestazioni e scoprire in che modo GraalVM Enterprise può accelerare le applicazioni su OCI. Applicazioni più veloci con requisiti di risorse ridotti si traducono in un numero minore o minore di server, riducendo i costi del cloud.
Contenuto laboratorio
In questo laboratorio:
- Connettiti a un'istanza VM in Oracle Cloud in cui esegui il laboratorio con GraalVM Enterprise già disponibile
- Eseguire un benchmark delle prestazioni JMH
- Generare un eseguibile nativo per un'applicazione Micronaut ed eseguirla
- Configurare il firewall host per consentire il traffico sull'istanza VM (facoltativo)
Tempo di laboratorio stimato: 30 minuti
NOTA: ogni volta che viene visualizzata l'icona del laptop, sarà necessario eseguire un'azione quale l'immissione di un comando o la modifica di un file.
# The box under the icon will tell you what to do.
Per copiare un comando, passare il puntatore del mouse sul campo, quindi fare clic sull'icona Copia negli Appunti.
Per incollare un comando copiato in una finestra di terminale, fare clic con il pulsante destro del mouse e selezionare l'opzione Paste
dal menu di scelta rapida. Se invece si preferisce i tasti di scelta rapida, utilizzare CTRL+SHIFT+V
.
Task 1: connessione a un'istanza VM in Oracle Cloud
Quando avvii il laboratorio, il provisioning delle risorse necessarie viene eseguito in background: rete cloud virtuale (VCN), istanza di computazione con l'immagine predefinita Oracle Linux 8. Il provisioning delle risorse include anche l'installazione e la configurazione dell'ambiente runtime GraalVM Enterprise con l'immagine nativa per mantenere questo laboratorio coerente e risparmiare tempo. Il completamento del provisioning può richiedere circa 5 minuti. È possibile sapere quando le risorse vengono completamente attivate e pronte consultando la scheda Risorse nella pagina Web di Luna Lab (vedere il passo 1, in basso).
-
Fare doppio clic sull'icona Luna Lab sul desktop per aprire il browser.
Attendere che l'ingranaggio animato oltre a Risorse si trasformi in un segno di spunta. Significa che il provisioning di tutte le risorse di computazione e di rete necessarie è stato eseguito e puoi continuare.
-
Fare clic sulla scheda Risorse nella pagina Luna Lab. La pagina Risorse mostra il nome e l'indirizzo IP pubblico di un'istanza VM di cui è stato eseguito il provisioning.
-
Copiare l'indirizzo IP pubblico dalla casella SERVER_IP. È necessario fare clic su
View Details
. Per copiare il puntatore del mouse sul campo, quindi fare clic sull'icona Copia negli Appunti. -
Ridurre al minimo la finestra del browser in modo da visualizzare Luna Desktop. Fare clic sul menu Applicazioni e aprire un emulatore di terminale.
-
Immettere il comando di connessione SSH dove
rappresenta l'indirizzo IP pubblico dell'istanza VM: ssh opc@<SERVER_IP>
Accettare l'impronta della chiave ECDSA digitando
yes
al prompt.
Ora sei connesso a un'istanza di VM in Oracle Cloud. L'istanza VM è già preconfigurata con GraalVM Enterprise e lo strumento Native Image richiesto per questo laboratorio. È possibile eseguire questi comandi in modo semplice e rapido:
java -version
native-image --version
Se desideri imparare a installare GraalVM Enterprise e le relative funzionalità su Oracle Linux da solo, esegui il laboratorio Introduzione a GraalVM su Oracle Linux al completamento di questo laboratorio.
È possibile continuare con il task successivo.
Task 2: esecuzione di demo: struttura di microbenchmark Java (JMH)
In questa parte verrà eseguito un benchmark Java per confrontare le prestazioni del compilatore JIT GraalVM Enterprise rispetto al compilatore JIT C2. Il compilatore Graal, abilitato per impostazione predefinita in GraalVM Enterprise, fornisce prestazioni ottimizzate per i programmi in esecuzione su JVM attraverso approcci unici all'analisi del codice, ottimizzazioni avanzate ed esegue un algoritmo in linea molto aggressivo per gerarchie di classe estese e approfondite.
Il benchmark che si intende eseguire viene scritto con JMH (Java Microbenchmark Harness) e utilizza l'API Java Stream. Illustra l'analisi della fuga in linea e parziale eseguita dal compilatore insieme, il che spiega significativi miglioramenti delle prestazioni in fase di esecuzione.
Il codice dell'origine demo è disponibile nella directory java-simple-stream-benchmark
.
Il microbenchmark crea un flusso da elementi di array e mappa ogni numero utilizzando diverse funzioni di mapping:
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);
}
}
Il file JavaSimpleStreamBenchmark.testMethod
viene eseguito con 3 iterazioni per consentire al compilatore JIT di eseguire il riscaldamento prima di analizzare le prestazioni. I risultati del benchmark vengono stampati alla console e sono espressi in nanosecondi per operazione, il che significa che i numeri sono migliori.
-
Nella finestra del terminale connessa all'istanza della VM, andare alla directory demo:
cd java-simple-stream-benchmark
-
Il progetto di benchmark è stato creato con Maven, ma non è disponibile con un wrapper Maven (
.mvnw
) e Oracle Linux non include Maven per impostazione predefinita. Installare Maven conyum
:sudo yum install maven
-
Creare il progetto:
mvn package
-
Eseguire il benchmark con il compilatore GraalVM Enterprise JIT:
java -jar target/benchmarks.jar
Richiamando il comando
java
, si utilizza il compilatore JIT Graal ottimizzato abilitato in GraalVM Enterprise per impostazione predefinita. -
Eseguire il benchmark sulla stessa JVM (GraalVM Enterprise), ma utilizzare il compilatore C2 anziché il compilatore Graal applicando l'opzione
-XX:-UseJVMCICompiler
.java -XX:-UseJVMCICompiler -jar target/benchmarks.jar
Confrontare i risultati del benchmark dopo aver completato i passi da 4 a 5. I risultati, ovviamente, dipenderanno dal numero di processori e dalla memoria dell'istanza VM in uso. Di seguito sono riportati i numeri utilizzati in un'istanza di computazione con la forma VM.Standard.2-2 e 30 GB di memoria.
Compilatore JIT carbone:
[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
Compilatore JIT 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
Il risultato medio del compilatore Graal JIT è più veloce di 5 volte rispetto a quello di C2 nello stesso benchmark.
È possibile continuare con il task successivo.
Task 3: Esegui le demo: eseguibile Linux nativo di Micronaut
Questo task si concentrerà sul confronto dei tempi di avvio durante l'esecuzione di un microservizio Java su una JVM e come eseguibile nativo. In entrambi i casi, il microservizio verrà eseguito su GraalVM Enterprise, ma verrà eseguito in diverse modalità: compilato in tempo reale o in anticipo, per dimostrare l'aumento dell'avvio.
Questo microservizio è scritto con Micronaut, una struttura Java full-stack adatta per la creazione di microservizi e applicazioni serverless. Si tratta di una semplice applicazione di rendering lato server, in cui il servizio ConferenceService.java contiene un elenco di conferenze e restituisce una conferenza casuale. Il controller viene definito con l'annotazione @Controller
e mappato al percorso /conferences
per ottenere un nome di conferenza casuale. Micronaut la converte automaticamente in JSON nella risposta.
-
Tornare alla directory home:
cd
-
Creare un'applicazione Micronaut che specifichi gli strumenti di creazione Maven o Gradle, scaricare le origini dell'applicazione, decomprimere l'archivio e accedervi.
mkdir micronaut-demo && cd micronaut-demo
Maven:
curl https://guides.micronaut.io/latest/micronaut-creating-first-graal-app-maven-java.zip -o micronaut-creating-first-graal-app.zip
Gradle:
curl https://guides.micronaut.io/latest/micronaut-creating-first-graal-app-gradle-java.zip -o micronaut-creating-first-graal-app.zip
Verrà scaricata la versione 3.0.x di Micronaut.
unzip micronaut-creating-first-graal-app.zip
-
Creare ed eseguire l'applicazione con Gradle o Wrapper Maven sulla JVM (GraalVM Enterprise).
Maven:
./mvnw mn:run
Gradle:
./gradlew run
L'applicazione viene avviata sulla porta 8080. Prendere nota del tempo necessario per avviare questo semplice microservizio Micronaut.
-
Terminare l'applicazione digitando
CTRL+C
. -
Genera un eseguibile Linux nativo standalone con immagine nativa. È possibile creare un eseguibile nativo utilizzando Gradle o Maven.
Maven specificando il formato di packaging
native-image
:./mvnw package -Dpackaging=native-image
Gradle eseguendo il task
nativeImage
del progetto Micronaut:./gradlew nativeImage
Se si utilizza Maven, per impostazione predefinita l'eseguibile denominato
micronautguide
verrà scritto nella directory target/ del progetto oppure nella directory build/native-image/ denominataapplication
se si utilizza Gradle.Nota: il tempo necessario per creare un eseguibile dipende dalle dimensioni e dalla complessità dell'applicazione e può richiedere del tempo su VM a basso consumo.
-
Richiamare l'eseguibile.
Costruito con Maven:
./target/micronautguide
Costruito con Gradle:
./build/native-image/application
Ancora una volta, prendere nota del tempo necessario per avviare questo microservizio come eseguibile nativo. Il programma si avvia molto più rapidamente perché il file eseguibile è un file binario autocontenuto e non richiede un JDK per l'esecuzione, rendendo così facile distribuire le applicazioni. La dimensione dei file è anche abbastanza piccola.
-
Terminare l'applicazione digitando
CTRL+C
.
L'immagine nativa di GraalVM crea un eseguibile nativo con le classi di applicazione, le classi di libreria dipendenti, le classi JDK dipendenti e uno snapshot dell'heap dell'applicazione con le classi inizializzate in fase di creazione. L'esecuzione di un'applicazione Java come eseguibile nativo consente l'avvio istantaneo, la riduzione del consumo di CPU e memoria, rendendo l'ambiente runtime GraalVM Enterprise un valido candidato alle distribuzioni cloud.
Hai già visto la differenza nei tempi di avvio e puoi già terminare questo laboratorio. Tuttavia, puoi continuare a eseguire il test di questa applicazione lato server in esecuzione in un browser che richiede la configurazione del firewall host per consentire il traffico verso l'istanza VM. Passare al task 4.
Task 4: la configurazione del firewall host consente il traffico su un'istanza VM (facoltativo)
Per eseguire il test dell'applicazione lato server sopra riportata in un browser, è necessario assicurarsi che il firewall host consenta il traffico sulla virtual machine.
-
Eseguire il login alla console OCI. Aprire la pagina Luna Lab e fare clic sul collegamento rapido della console OCI. Immettere il nome utente e la password forniti in Credenziali per questo account temporaneo di laboratorio.
-
Dopo aver eseguito il login alla console OCI, andare a Computazione e fare clic su Istanze.
-
Selezionare un compartimento necessario nell'elenco a discesa Compartimento a sinistra. Per trovare il nome del compartimento, tornare alla pagina Luna Lab, quindi fare clic su Oracle Cloud e visualizzare il campo Compartment Name.
-
Individuare l'istanza VM nella vista principale e aprirla.
-
Nella sezione VNIC primaria fare clic su Subnet a cui è collegata l'istanza.
-
Nella pagina della subnet, fare clic sulla lista di sicurezza (nome che inizia con ds-luna-seclist-).
-
Premere Aggiungi regola di entrata e immettere i dati riportati di seguito.
La regola consente al traffico da tutte le origini di utilizzare la porta 8080, in modo che l'applicazione possa essere raggiunta ovunque.
-
Tornare alla finestra del terminale ed eseguire i comandi seguenti per riavviare il firewall nell'istanza VM in esecuzione.
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo systemctl reload firewalld
-
Riavviare l'applicazione:
Costruito con Maven:
./target/micronautguide
Costruito con Gradle:
./build/native-image/application
-
Aprire l'applicazione in un browser,
http://<SERVER_IP>:8080/conferences/random
, in cui<SERVER_IP>
è l'indirizzo IP pubblico dell'istanza. Poiché l'annotazione Micronaut@Controller
è mappata al percorso/conferences
, è necessario aggiungere il percorso/conferences/random
all'URL.http://<SERVER_IP>:8080/conferences/random
-
(Facoltativo) Aprire una nuova finestra termianl e inviare una richiesta GET con
curl
:curl http://<SERVER_IP>:8080/conferences/random
Congratulazioni. Questo laboratorio è stato completato.
Per saperne di più
- Fai questo laboratorio per scoprire come installare GraalVM Enterprise e le sue funzionalità su Oracle Linux da solo.
- Ottieni un'esperienza pratica in laboratorio utilizzando l'immagine nativa GraalVM e inizia a creare applicazioni Java cloud native eseguendo il laboratorio GraalVM Native Image Quick Start.
- Consulta la documentazione di GraalVM Enterprise
- Visita la pagina del prodotto all'indirizzo oracle.com
Per terminare questa sessione, fare clic sul pulsante Fine sessione nella barra degli strumenti.
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di apprendimento gratuito sul canale Oracle Learning YouTube. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare il sito Oracle Help Center.
Accelerate Applications in OCI with GraalVM Enterprise
F54873-01
March 2022
Copyright © 2022, Oracle and/or its affiliates.