Quarkus: modernizzazione delle applicazioni con l'esempio helloworld dal JBoss EAP Quickstart (continua)

Ciao a tutti – questo è il quinto post della nostra serie su Quarkus! (Tra l'altro, non perdete il nostro webinar «Quarkus è un framework Java nativo per Kubernetes». Mostreremo come iniziare «da zero» o migrare soluzioni esistenti)

Quarkus: modernizzazione delle applicazioni con l'esempio helloworld dal JBoss EAP Quickstart (continua)

In post precedente abbiamo esaminato la modernizzazione delle applicazioni Java usando tecnologie supportate da Quarkus (CDI e Servlet 3) con l'esempio del programma helloworld del repository Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart. Oggi continueremo a parlare di modernizzazione e discuteremo del consumo di memoria.

La misurazione delle prestazioni è un fondamento fondamentale per quasi qualsiasi modernizzazione, e i rapporti sull'uso della memoria sono una parte importante del processo di analisi delle prestazioni. Oggi esamineremo gli strumenti di misurazione pertinenti che consentono di valutare quantitativamente i miglioramenti ottenuti attraverso la modernizzazione delle applicazioni Java.

Maggiori dettagli sulla misurazione dell'uso della memoria possono essere trovati nella guida di Quarkus intitolata Measuring Performance—How do we measure memory usage?

Di seguito, mostreremo semplicemente come confrontare i dati sull'uso della memoria di tre diversi tipi di applicazioni (JBoss EAP, pacchetto JAR e file eseguibile), raccogliendo questi dati in Linux utilizzando gli strumenti pmap e ps.

JBoss EAP

Avviamo un'istanza dell'applicazione JBoss EAP (vedi sezione «Distribuiamo helloworld» in post precedente) e poi controlliamo il suo identificativo di processo PID (nel nostro esempio è 7268) con il seguente comando:

$ pgrep -lf jboss
7268 java

Nota. L'opzione –a consente di estrarre l'intera riga di comando (cioè: $ pgrep -af jboss).

Ora utilizziamo il PID 7268 nei comandi ps e pmap.

Ecco come:

$ ps -o pid,rss,command -p 7268
PID RSS COMMAND 
7268 665348 java -D[Standalone] -server -verbose:gc -Xloggc:/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferI

E così:

$ pmap -x 7268
7268:   java -D[Standalone] -server -verbose:gc -Xloggc:/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/home/mrizzi/Tools/jboss-eap-7.2.0/jboss-eap-7.2/standa
Address           Kbytes     RSS   Dirty Mode  Mapping
00000000ae800000 1348608  435704  435704 rw---   [ anon ]
0000000100d00000 1035264       0       0 -----   [ anon ]
000055e4d2c2f000       4       4       0 r---- java
000055e4d2c30000       4       4       0 r-x-- java
000055e4d2c31000       4       0       0 r---- java
000055e4d2c32000       4       4       4 r---- java
000055e4d2c33000       4       4       4 rw--- java
[...]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
total kB         3263224  672772  643024

Osserviamo il valore RSS e notiamo che JBoss EAP consuma circa 650 MB di memoria.

Pacchetto JAR

Avviamo l'applicazione JAR (vedi la sezione "Avviamo helloworld, impacchettato in JAR" in post precedente):

$ java -jar ./target/helloworld-<version>-runner.jar

Controlliamo di nuovo il PID con il comando pgrep (questa volta utilizziamo l'opzione -a descritta sopra):

$ pgrep -af helloworld
6408 java -jar ./target/helloworld-<version>-runner.jar

Avviamo ps e pmap per misurare l'utilizzo della memoria, ma ora per il processo 6408.

Ecco come:

$ ps -o pid,rss,command -p 6408
  PID   RSS COMMAND
 6408 125732 java -jar ./target/helloworld-quarkus-runner.jar

E così:

$ pmap -x 6408
6408:   java -jar ./target/helloworld-quarkus-runner.jar
Address           Kbytes     RSS   Dirty Mode  Mapping
00000005d3200000  337408       0       0 rw---   [ anon ]
00000005e7b80000 5046272       0       0 -----   [ anon ]
000000071bb80000  168448   57576   57576 rw---   [ anon ]
0000000726000000 2523136       0       0 -----   [ anon ]
00000007c0000000    2176    2088    2088 rw---   [ anon ]
00000007c0220000 1046400       0       0 -----   [ anon ]
00005645b85d6000       4       4       0 r---- java
00005645b85d7000       4       4       0 r-x-- java
00005645b85d8000       4       0       0 r---- java
00005645b85d9000       4       4       4 r---- java
00005645b85da000       4       4       4 rw--- java
[...]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
total kB         12421844  133784  115692

Controlliamo di nuovo l'RSS e vediamo che il pacchetto JAR consuma circa 130 MB.

File eseguibile

Avviamo il nativo (vedi la sezione «Avviamo il file eseguibile nativo helloworld» in post precedente):

$ ./target/helloworld-<version>-runner

Controlliamo di nuovo il suo PID:

$ pgrep -af helloworld
6948 ./target/helloworld-<version>-runner

E poi usiamo l'identificatore di processo ottenuto (6948) nei comandi ps e pmap.

Ecco come:

$ ps -o pid,rss,command -p 6948
  PID   RSS COMMAND
 6948 19084 ./target/helloworld-quarkus-runner
Ecco come:
$ pmap -x 6948
6948:   ./target/helloworld-quarkus-runner
Indirizzo           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000      12      12       0 r---- helloworld-quarkus-runner
0000000000403000   10736    8368       0 r-x-- helloworld-quarkus-runner
0000000000e7f000    7812    6144       0 r---- helloworld-quarkus-runner
0000000001620000    2024    1448     308 rw--- helloworld-quarkus-runner
000000000181a000       4       4       4 r---- helloworld-quarkus-runner
000000000181b000      16      16      12 rw--- helloworld-quarkus-runner
0000000001e10000    1740     156     156 rw---   [ anon ]
[...]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
totale kB         1456800   20592    2684

Controlliamo RSS e vediamo che il file eseguibile occupa circa 20 MB di memoria.

Confrontiamo il consumo di memoria

Quindi, abbiamo ottenuto i seguenti numeri sull'uso della memoria:

  • JBoss EAP – 650 MB.
  • Pacchetto JAR – 130 MB.
  • File eseguibile – 20 MB.

Evidentemente, il file eseguibile occupa molta meno memoria.

Riassumiamo i post 4 e 5

In questo e nel post precedente abbiamo esaminato la questione della modernizzazione delle applicazioni Java utilizzando tecnologie supportate da Quarkus (CDI e Servlet 3), oltre a diversi modi di sviluppare, costruire e avviare tali applicazioni. Abbiamo mostrato come effettuare la raccolta di dati sull'utilizzo della memoria per valutare i miglioramenti ottenuti grazie a questa modernizzazione. Questi articoli aiutano a comprendere come funziona Quarkus e quali siano i suoi vantaggi – indipendentemente dal fatto che si tratti di un semplice programma helloworld dei nostri esempi o di applicazioni molto più complesse della vita reale.

Torneremo tra due settimane con il post finale su Quarkus – a presto!

Nel nostro post finale mostreremo come combinare AMQ Online e Quarkus per costruire un moderno sistema di messaggistica basato su OpenShift utilizzando due nuove tecnologie legate all'elaborazione dei messaggi. Leggi di più link.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster