Quarkus: modernizarea aplicațiilor pe baza exemplului helloworld din JBoss EAP Quickstart (continuare)

Salut tuturor – acesta este al cincilea post din seria noastră despre Quarkus! (Apropo, vizionați webinarul nostru „Acesta este Quarkus – un framework Java nativ pentru Kubernetes”. Vă vom arăta cum să începeți „de la zero” sau să migrați soluții deja existente)

Quarkus: modernizarea aplicațiilor pe baza exemplului helloworld din JBoss EAP Quickstart (continuare)

În postarea anterioară am discutat despre modernizarea aplicațiilor Java folosind tehnologiile Quarkus suportate (CDI și Servlet 3) pe baza programului helloworld din repository Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart. Astăzi vom continua tema modernizării și vom discuta despre consumul de memorie.

Măsurarea performanței este fundamentul aproape oricărei modernizări, iar rapoartele de utilizare a memoriei sunt o parte esențială a procesului de analiză a performanței. Astăzi vom explora instrumentele de măsurare relevante, care permit evaluarea cantitativă a îmbunătățirilor obținute prin modernizarea aplicațiilor Java.

Detalii despre măsurarea utilizării memoriei pot fi găsite în ghidul Quarkus intitulat Measuring Performance—How do we measure memory usage?

Mai jos, vom arăta pur și simplu cum să comparăm datele privind utilizarea memoriei pentru trei tipuri diferite de aplicații (JBoss EAP, pachet JAR și executabil), colectând aceste date în Linux cu ajutorul utilitarilor pmap și ps.

JBoss EAP

Lansăm un exemplar al aplicației JBoss EAP (vezi secțiunea „Desfășurăm helloworld” în postarea anterioară) și apoi ne uităm la identificatorul său de proces PID (în exemplul nostru acesta este 7268) folosind următoarea comandă:

$ pgrep -lf jboss
7268 java

Notă. Opțiunea –a permite extragerea liniei complete de comandă (adică: $ pgrep -af jboss).

Acum folosim PID 7268 în comenzile ps și pmap.

Așa:

$ 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

Și așa:

$ 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

Privindem valoarea RSS și vedem că JBoss EAP consumă aproximativ 650 MB de memorie.

Pachet JAR

Lansăm aplicația JAR (vezi secțiunea „Lansăm helloworld, ambalat în JAR” din postarea anterioară):

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

Din nou, verificăm PID-ul folosind comanda pgrep (de data aceasta folosim opțiunea descrisă mai sus -a):

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

Lansăm ps și pmap pentru a măsura utilizarea memoriei, dar acum pentru procesul 6408.

Așa:

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

Și așa:

$ pmap -x 6408
6408:   java -jar .\/target\/helloworld-quarkus-runner.jar
Adresa           Kbytes     RSS   Dirty Modul  Mapare
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

Din nou, verificăm RSS și vedem că pachetul JAR consumă aproximativ 130 MB.

Fișier executabil

Lansăm nativul (vezi secțiunea „Lansăm fișierul executabil nativ helloworld” din postarea anterioară):

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

Din nou, verificăm PID-ul său:

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

Și apoi folosim identificatorul de proces obținut (6948) în comenzile ps și pmap.

Așa:

$ ps -o pid,rss,command -p 6948
  PID   RSS COMANDĂ
 6948 19084 .\/target\/helloworld-quarkus-runner
Și așa:
$ pmap -x 6948
6948:   .\/target\/helloworld-quarkus-runner
Adresa           Kbytes     RSS   Dirty Modul  Mapare
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 ]
---------------- ------- ------- -------
total kB         1456800   20592    2684

Privindem RSS și vedem că fișierul executabil ocupă aproximativ 20 MB de memorie.

Comparăm consumul de memorie

Așadar, am obținut următoarele cifre pentru utilizarea memoriei:

  • JBoss EAP – 650 MB.
  • Pachet JAR – 130 MB.
  • Fișier executabil – 20 MB.

Este evident că fișierul executabil folosește mult mai puțină memorie.

Facem un rezumat al postărilor 4 și 5

În această postare și în cea anterioară, am analizat problema modernizării aplicațiilor Java utilizând tehnologiile suportate de Quarkus (CDI și Servlet 3), precum și diferitele modalități de dezvoltare, construire și lansare a acestor aplicații. Am arătat cum să colectăm date privind utilizarea memoriei pentru a evalua îmbunătățirile obținute în urma acestei modernizări. Aceste articole ajută la înțelegerea modului în care funcționează Quarkus și care sunt beneficiile sale – indiferent dacă este vorba despre cea mai simplă aplicație helloworld din exemplele noastre sau despre aplicații mult mai complexe din viața reală.

Ne vom întoarce peste două săptămâni cu postarea finală despre Quarkus – până atunci, rămâneți cu bine!

În postarea noastră finală, vom arăta cum să combinăm AMQ Online și Quarkus pentru a construi un sistem modern de schimb de mesaje pe baza OpenShift, folosind două noi tehnologii legate de procesarea mesajelor. Citiți mai multe despre linkul.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster